Nomflixリビルド-SSRの適用[2]
13355 ワード
Next.利用js
getServerSidePropsがいつ実行されるか
getServerSidePropsはサーバ側のみで実行され、ブラウザでは実行されません.
このページを直接要求すると、getServerSideProps要求時に実行されて返されるpropsがプリレンダリングされます.
使用
next/link
ornext/router
クライアントページ移動を要求する場合はgetServerSidePropsgetServerSidePropsはいつ使用しますか?
getServerSidePropsを要求するときにデータをインポートしてページを事前にレンダリングする必要がある場合にのみ使用できます.
プリレンダリングデータが不要な場合は、クライアントからデータをインポートすることを考慮します.
公式文書に親切に書いてありました.
Clent-Side
多くのデータ交換が行われているgetServer SidePropsは使用されていません.
NomFlix 프로젝트
getServerSidePropsによるデータ通信を試みるMovieリストを受信するgetServerSideProps
一例を挙げて、Movieリストを持ってきてください.
これらのムービーリストを受け取ります
伝統的に、
useEffect(() => {
async function fetchData() {
try {
const {
data: { results: nowPlaying },
} = await movieApi.nowPlaying();
const {
data: { results: upcoming },
} = await movieApi.upcoming();
const {
data: { results: popular },
} = await movieApi.popular();
loading.current = false;
setNowPlaying(nowPlaying);
setUpcoming(upcoming);
setPopular(popular);
} catch (error) {
setError("Can't find movies infomation.");
}
}
fetchData();
}, [loading]);
このようにして、Client-Side
中Fetching
状態にする.これをクリアし、次のコードをコンポーネントの外に記述します.
export const getServerSideProps: GetServerSideProps = async () => {
try {
const {
data: { results: nowPlaying },
} = await movieApi.nowPlaying();
const {
data: { results: upcoming },
} = await movieApi.upcoming();
const {
data: { results: popular },
} = await movieApi.popular();
return { props: { nowPlaying, upcoming, popular } };
} catch (err) {
const ErrorMessage = "Can't find movies infomation.";
return { props: { ErrorMessage } };
}
};
try
節nowplaying、new、popular通信を受信して返却に成功する.catch
節は、要求に失敗した場合にエラーメッセージを返します.を選択します.
interface ServerSideProps {
nowPlaying: Array<MOVIE_TYPE>;
upcoming: Array<MOVIE_TYPE>;
popular: Array<MOVIE_TYPE>;
ErrorMessage: string;
}
const Home = ({ nowPlaying, upcoming, popular, ErrorMessage }: ServerSideProps) => {
const [error, setError] = useState('');
const loading = useRef(true);
useEffect(() => {
// eslint-disable-next-line react-hooks/rules-of-hooks
if ((useIsNull(nowPlaying) && useIsNull(upcoming) && useIsNull(popular)) === false) {
loading.current = false;
}
});
}
サーバ側が受信し、以前使用していた不要な状態がクリアされました.次にpropsが空いているかどうかを確認し、loadをfalseに変更します!
ではこれでリフレッシュの時も出てきます~~
Next.jsはよく使うけど
自動ルーティングの利便性という理由だけを使いました.
SSRを適用するのは初めてで、不思議な経験でした.
Reference
この問題について(Nomflixリビルド-SSRの適用[2]), 我々は、より多くの情報をここで見つけました https://velog.io/@wnsguddl789/Nomflix-리팩토링-SSR-적용2テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol