Chciałem wyświetlić kod z jednego z moich repozytoriów GitHub w aplikacji React i chciałem, aby aktualizował się automatycznie na stronie, gdy wypchnę nową wersję.
Chciałem tego dla małej biblioteki komponentów, którą tworzyłem dla siebie, abym mógł zobaczyć najnowszą wersję komponentu z repozytorium. Aby to osiągnąć, użyłem API GitHub i pakietu podświetlania składni Prism.
npm i @octokit/rest react-prism axios
2. Uwierzytelnij się w GitHub z aplikacji React.
authi userAgent.import { Octokit } from "@octokit/rest"
export const octokit = new Octokit({
auth: "your token string here",
userAgent: 'skylight v1'
});
touch .env.nano .envREACT_APP_GHi przypisz wartość do swojego tokena GitHub.
W module octokit.js zastąp ciąg tokenu ukrytą zmienną.
import { Octokit } from "@octokit/rest"
export const octokit = new Octokit({
auth: process.env.REACT_APP_GH,
userAgent: 'skylight v1'
});
5. Wywołaj interfejs 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
}
};
Uważam, że dzięki temu podejściu API GH ogranicza szybkość do 5000 wywołań na godzinę , więc to podejście nie jest użyteczne w przypadku witryn o dużym ruchu.
Konsola.rejestrując odpowiedź, widzimy udane wywołanie w przeglądarce.
console.log(res):
Dużo informacji tutaj. Adres URL z Github, nazwa pliku, ścieżka. Jedna rzecz, której wyraźnie brakuje (na pierwszy rzut oka) to rzeczywisty kod. Jest w odpowiedzi, w contentparametrze. Github koduje całą zawartość za pomocą base64 , który jest formatem przesyłania plików binarnych do ciągów tekstowych, aby można je było przesyłać online. Więcej na ten temat tutaj .
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
}
};
codez haka.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()metody z useEffect, aby podświetlić składnięimport 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;
To wszystko.
Bibliografia:
Wstęp Udar to nagły przypadek medyczny, który może dotknąć każdego w dowolnym momencie. Występuje, gdy przepływ krwi do części mózgu zostaje zakłócony, co prowadzi do nagłej utraty funkcji mózgu.
Testowanie jest istotną częścią tworzenia oprogramowania. Zapewnia, że kod jest niezawodny, działa zgodnie z oczekiwaniami i zmniejsza prawdopodobieństwo błędów.
Każdy racjonalnie myślący wie, że w kręgach politycznych i medialnych dominuje lewica, nawet skrajna lewica, co powoduje zachwianie równowagi w dyskursie politycznym. W dziedzinie religii ta nierównowaga jest wyraźnie widoczna: lewicowe gazety i sieci nie spieszą się z obroną wiary chrześcijańskiej.
W dzisiejszym szybko zmieniającym się krajobrazie biznesowym koncepcja pracy hybrydowej i zdalnej nabrała bezprecedensowego rozpędu. Ponieważ firmy wciąż dostosowują się do zmieniających się potrzeb i oczekiwań swoich pracowników, eksperci z różnych dziedzin zebrali się, aby omówić korzyści, wyzwania i przyszłość tego transformacyjnego sposobu pracy.
Możesz być śledczym OSINT, graczem CTF lub po prostu kimś, kto odbiera połączenia spamowe. Ktoś, kto próbuje zweryfikować numer, który widziałeś w reklamie.
Swędzenie w mojej dłoni rozszerzyło się, gdy targowałem się z miejscowym księgarzem o kolejną książkę. Ta książka, podobnie jak pozostałe, które ostatnio kupiłem, znalazłaby swój tron na moim stosie „Do przeczytania” (TBR); a mimo to kupiłem.