React 앱에 내 GitHub 저장소 중 하나의 코드를 표시하고 싶었고 새 버전을 푸시 할 때 사이트에서 자동으로 업데이트되기를 원했습니다.
내가 직접 만든 작은 구성 요소 라이브러리를 위해 이것을 원했기 때문에 저장소에서 구성 요소의 최신 버전을 볼 수있었습니다. 이를 위해 GitHub API와 Prism 구문 강조 패키지를 사용했습니다.
npm i @octokit/rest react-prism axios
2. React 앱에서 GitHub에 인증합니다.
auth및에 대한 Oauth 토큰입니다 userAgent.import { Octokit } from "@octokit/rest"
export const octokit = new Octokit({
auth: "your token string here",
userAgent: 'skylight v1'
});
touch .env.nano .envREACT_APP_GH값을 GitHub 토큰에 할당합니다.
octokit.js 모듈에서 토큰 문자열을 숨겨진 변수로 바꿉니다.
import { Octokit } from "@octokit/rest"
export const octokit = new Octokit({
auth: process.env.REACT_APP_GH,
userAgent: 'skylight v1'
});
5. GitHub API 호출
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
}
};
GH API는 이 접근 방식을 사용하여 시간당 5,000 호출로 속도를 제한한다고 생각하므로이 접근 방식은 트래픽이 많은 사이트에는 사용할 수 없습니다.
응답을 Console.logging하면 브라우저에서 성공적인 호출을 볼 수 있습니다.
console.log(res):
여기에 많은 정보가 있습니다. Github의 URL, 파일 이름, 경로. 눈에 띄게 빠진 한 가지는 실제 코드입니다. 응답, content매개 변수에 있습니다. Github는 바이너리 파일을 온라인으로 전송할 수 있도록 텍스트 문자열로 전송하는 형식 인 base64로 모든 콘텐츠를 인코딩합니다 . 여기 에 대해 자세히 알아 보십시오 .
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
}
};
code후크에서 돌아 옵니다.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()useEffect와 함께 메서드를 사용하여 구문을 강조 표시합니다.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;
그게 다야.
참조 :
머리말 뇌졸중은 누구에게나 언제든지 닥칠 수 있는 의학적 응급 상황입니다. 뇌의 한 부분으로의 혈류가 중단되어 갑작스러운 뇌 기능 상실로 이어질 때 발생합니다.
오늘날과 같이 급변하고 경쟁이 치열한 세상에서 경력은 개인의 성장, 재정적 안정 및 전반적인 삶의 만족도에 중요한 역할을 합니다. 그러나 많은 사람들은 침체와 불만족의 끊임없는 순환에 휩싸여 직업 생활에서 점차 쇠퇴하고 있습니다.
낡은 것이 다시 새 것이 되고, 번쩍이던 것이 이제는 무디게 느껴진다. JNCO 청바지가 1990년대 후반의 다른 패션과 함께 시내의 쿨한 아이들 사이에서 컴백하는 것에 대해 말하는 것이 아닙니다.
우리가 이 행성에서 계속 번성하고 싶다면 위험한 대화를 해야 할 것입니다. 우리가 한 것, 우리가 하고 있는 것, 그리고 현재 우리가 계속하기로 설정한 것(또는 할 계획인 것)에 도전하는 것들.
새로운 직업으로 전환하는 것은 혼자서 하려고 한다면 매우 어려울 수 있습니다. 귀하와 동일한 학습 수준에 있고 유사한 목표, 끈기 및 추진력을 공유하는 책임 파트너를 찾는 것이 중요합니다.