반응 앱 버전 확인 만들기
이를 통해 react-router과 같은 항목을 추가할 수 있으며 새 SPA(단일 페이지 애플리케이션)에 대한 뼈대를 갖게 됩니다.
모두 훌륭하지만 단일 페이지 애플리케이션이므로 사이트를 사용하는 사람들이 사용 가능한 최신 버전이 있다는 것을 어떻게 알 수 있습니까? 이는 배포에서 API 계약을 업데이트한 경우 특히 중요합니다.
이미 이 작업을 수행할 정의된 파이프라인이 없는 한 최신 변경 사항을 적용하려면 페이지를 새로 고쳐야 할 수도 있음을 사용자에게 알릴 수 있는 저렴하고 쉬운 방법이 있습니다.
create-react-app는
yarn build
명령이 실행될 때 manifest.json 파일을 생성합니다. 이 파일은 기본적으로 응용 프로그램에 파일이 있는 위치/무엇을 알려줍니다. 파일 이름은 각 빌드에 대해 해시됩니다. 이것은 우리가 어떻게든 이 매니페스트 파일을 폴링하는 한 무언가가 변경되었는지 알 수 있음을 의미합니다...따라서 우리는 높은 수준에 놓일 수 있는 일종의 구성 요소를 만들어야 합니다. 이 구성 요소는 이 매니페스트를 폴링하고 변경 사항이 있는지 UI에 알려야 합니다.
다음은 재질 UI를 사용하여 버전이 변경될 때마다 스낵바를 표시하는 예제입니다.
import {Button} from '@material-ui/core';
import {CloseOutlined} from '@material-ui/icons';
import {useSnackbar} from 'notistack';
import React, {useState} from 'react';
const MANIFEST = '/asset-manifest.json';
const POLL_INTERVAL = 60000;
export const VersionCheck: React.FC = ({children}) => {
const {enqueueSnackbar, closeSnackbar} = useSnackbar();
const [dismissedVersion, setDismissedVersion] = useState('');
React.useEffect(() => {
const getLatestVersion = async () => {
const response = await fetch(MANIFEST);
return await response.text();
};
const init = async () => {
try {
const latestVersion = await getLatestVersion();
localStorage.setItem('tend-version', latestVersion);
} catch (ex) {
// log to sentry / or something
} finally {
setTimeout(poll, POLL_INTERVAL);
}
};
const poll = async () => {
try {
const currentVersion = localStorage.getItem('tend-version');
const latestVersion = await getLatestVersion();
if (currentVersion && currentVersion !== latestVersion && latestVersion !== dismissedVersion) {
enqueueSnackbar('A new version is available', {
variant: 'info',
persist: true,
preventDuplicate: true,
action: (key) => (
<>
<Button color="inherit" onClick={() => window.location.reload()}>
Refresh
</Button>
<Button
color="inherit"
variant="text"
onClick={() => {
setDismissedVersion(latestVersion);
closeSnackbar(key);
}}>
<CloseOutlined />
</Button>
</>
),
});
}
} catch (ex) {
// log somewhere
} finally {
setTimeout(poll, POLL_INTERVAL);
}
};
if (process.env.NODE_ENV === 'production') {
init();
}
}, [closeSnackbar, dismissedVersion, enqueueSnackbar]);
return <>{children}</>;
};
이렇게 하면 배포된 파일이 변경되었을 때 다음 스낵바가 표시됩니다.
.
왜 이것을 원하십니까? SPA를 사용하면 때때로 최신 파일을 얻기 위해 웹 사이트를 새로 고칠 필요가 전혀 없습니다. 이는 API를 사용하는 클라이언트가 잠재적으로 매우 오래된 코드를 실행할 수 있음을 의미합니다. API와 클라이언트 간에 주요 계약을 변경한 경우 어떻게든 알려야 합니다. 이로 인해 최근에 터치한 UI 부분이 올바르게 작동하지 않는다는 버그 보고서가 단락될 수 있습니다.
Reference
이 문제에 관하여(반응 앱 버전 확인 만들기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/jonocairns/create-react-app-version-check-2o7j텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)