Tôi muốn hiển thị một số mã từ một trong các kho lưu trữ GitHub của mình trong ứng dụng React và tôi muốn nó tự động cập nhật trên trang web khi tôi đẩy phiên bản mới.
Tôi muốn điều này cho một thư viện thành phần nhỏ mà tôi đang tạo cho chính mình, vì vậy tôi có thể xem phiên bản mới nhất của thành phần từ repo. Để thực hiện điều này, tôi đã sử dụng API GitHub và gói tô sáng cú pháp Prism.
npm i @octokit/rest react-prism axios
2. Xác thực với GitHub từ ứng dụng React của bạn.
authvà a userAgent.import { Octokit } from "@octokit/rest"
export const octokit = new Octokit({
auth: "your token string here",
userAgent: 'skylight v1'
});
touch .env.nano .envREACT_APP_GHvà gán giá trị cho mã thông báo GitHub của bạn.
Trong mô-đun octokit.js, thay thế chuỗi mã thông báo bằng biến ẩn.
import { Octokit } from "@octokit/rest"
export const octokit = new Octokit({
auth: process.env.REACT_APP_GH,
userAgent: 'skylight v1'
});
5. Gọi API GitHub
import { useState, useEffect } from 'react';
import { octokit } from '../utils/octokit';
export default function useOctokit(path) {
const [code, setCode] = useState(null);
useEffect(() => {
async function onLoad() {
await octokit.request(
'GET /repos/{owner}/{repo}/contents/{path}', {
owner: 'jawblia',
repo: 'components',
path: `src/lib/components/${path}`
}).then(res => console.log(res)
}).catch(err => console.log(err));
}
onLoad();
},[])
return {
code
}
};
Tôi tin rằng API GH thực hiện giới hạn tốc độ ở 5.000 cuộc gọi mỗi giờ với phương pháp này, vì vậy phương pháp này không thể sử dụng được cho các trang web có nhiều lưu lượng truy cập.
Console.logging phản hồi, chúng tôi thấy cuộc gọi thành công trong trình duyệt.
console.log(res):
Rất nhiều thông tin ở đây. URL từ Github, tên của tệp, đường dẫn. Một điều đáng chú ý bị thiếu (thoạt nhìn) là mã thực tế. Nó nằm trong phản hồi, trong contenttham số. Github mã hóa tất cả nội dung, với base64 , là định dạng để chuyển các tệp nhị phân thành chuỗi văn bản để chúng có thể được chuyển trực tuyến. Thêm về nó ở đây .
console.log(res.data.content):
aW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JzsgCmltcG9ydCBGbGV4IGZyb20g
Jy4vbGF5b3V0L0ZsZXgnOwoKY29uc3QgQmFkZ2UgPSAoeyB2YWx1ZSB9KSA9
PiB7CiAgICByZXR1cm4gKAogICAgICAgICAgICA8RmxleCBjZW50ZXIgbWlk
ZGxlIGNsYXNzTmFtZT17YGJhZGdlICR7IXZhbHVlID8gJ2JhZGdlLS1ub25l
JyA6Jyd9IGB9PgogICAgICAgICAgICAgICAgPGg0IGNsYXNzTmFtZT0iaGVh
dnkiPnt2YWx1ZSB8fCAwfTwvaDQ+CiAgICAgICAgICAgIDwvRmxleD4KICAg
ICk7Cn0KIApleHBvcnQgZGVmYXVsdCBCYWRnZTs=
import { useState, useEffect } from 'react';
import { octokit } from '../utils/octokit';
export default function useOctokit(path) {
const [code, setCode] = useState(null);
useEffect(() => {
async function onLoad() {
await octokit.request(
'GET /repos/{owner}/{repo}/contents/{path}', {
owner: 'jawblia',
repo: 'components',
path: `src/lib/components/${path}`
}).then(res => {
const encoded = res.data.content;
const decoded = atob(encoded);
setCode(decoded);
}).catch(err => console.log(err));
}
onLoad();
},[])
return {
code
}
};
codetừ móc.import React, { useState } from 'react';
import useOctokit from '../hooks/useOctokit';
import Codeblock from '../data/raw/Codeblock';
const CodeDetails = (path) => {
const { code } = useOctokit(path);
return <Codeblock code={code} lang='js'/>;
}
export default CodeDetails;
highlightAll()phương thức với useEffect để làm nổi bật cú phápimport React, { useEffect } from 'react';
import Prism from 'prismjs';
import './_styles/assets/prism.css';
const Codeblock = ({ code, lang }) => {
useEffect(() => {
Prism.highlightAll();
}, [code]);
return (
<div className="codeblock">
<pre className="line-numbers">
<code className={`language-${lang}`}>
{code}
</code>
</pre>
</div>
);
}
export default Codeblock;
Đó là tất cả.
Người giới thiệu:
Giới thiệu Đột quỵ là một trường hợp cấp cứu y tế có thể tấn công bất kỳ ai vào bất kỳ lúc nào. Nó xảy ra khi lưu lượng máu đến một phần của não bị gián đoạn, dẫn đến mất chức năng não đột ngột.
Kiểm thử là một phần thiết yếu của quá trình phát triển phần mềm. Nó đảm bảo rằng mã đáng tin cậy, hoạt động như mong đợi và giảm khả năng xảy ra lỗi.
Tay tôi ngứa ngáy lan rộng khi tôi mặc cả với người bán sách địa phương để mua một cuốn sách khác. Cuốn sách này giống như những cuốn còn lại mà tôi đã mua gần đây sẽ lên ngôi trong đống 'Cần đọc' (TBR) của tôi; tuy nhiên, tôi đã mua nó.
Trong thế giới kết nối ngày nay, mối đe dọa tấn công mạng phổ biến hơn bao giờ hết. Tội phạm mạng và các tác nhân quốc gia liên tục tìm cách khai thác các lỗ hổng và đánh cắp dữ liệu có giá trị, gây rủi ro đáng kể cho các tổ chức thuộc mọi quy mô.
Chuyển sang một nghề nghiệp mới có thể cực kỳ khó khăn nếu bạn cố gắng làm điều đó một mình. Điều quan trọng là phải tìm được những đối tác có trách nhiệm, những người có cùng trình độ học vấn với bạn, những người có chung mục tiêu, sự kiên trì và động lực.