SWRの導入
このブログは一覧ページはいいね(いいねボタン未実装)の多い順に表示しているのだが、リアルタイムに反映させたい。
しかしながら毎回フェッチするのはパフォーマンス的に問題がある。
そこでSWRを導入することにした。
しかしながら毎回フェッチするのはパフォーマンス的に問題がある。
そこでSWRを導入することにした。
インストール
npm install swr -S
ソースは以下
import useSWR from 'swr'
const getPosts = async () => {
const _posts = await app.content.get({ schemaKey: "myposts", populate: true, orderBy: { field: 'like', order: 'desc' } });
const posts: any[] = [];
Object.keys(_posts).forEach(key => {
const post = _posts[key]
delete (post._fl_meta_);
posts.push(post)
});
return posts;
}
export const getStaticProps: GetStaticProps = async () => {
auth = auth || await firebase.auth().signInWithEmailAndPassword(process.env.ADMIN_ID, process.env.ADMIN_PASSWORD);
const posts = await getPosts();
return {
props: {
posts: posts
},
}
}
const index = (props: any) => {
//
//ここで匿名認証しているが、割愛
//
const { posts, error } = useSWR('/blog/posts', getPosts, { initialData: props.posts });
if (error) return <div>failed to load</div>
if (!data) return <div>loading...</div>
const out = posts.map(post=>{
return (<div>{post}</div>)
});
return (
<div>
{out}
</div>
)
}