gatsbyでページを作ると、生成処理に時間がかるので。fetch apiでjsonを取得して表示する方法を取る。はじめに本日のjsonを取得して表示。ページにカレンダーを入れて日付をクリックすると日付に応じたページを表示する。そのために日付にonClickDayに応じた処理を追加する。jsonを読み込みページを更新する。
<Calendar value={value} onClickDay={(e) => setValue(e)} />
fetch apiでjson取得、クライアントからjsonを取得して表示する。
fetch("https://kyukyunyorituryo.github.io/new_epub/json/20250101j.json") .then((res) => res.json()) .then((json) => console.log(json)) .catch(() => alert("error"));
描画されてからfetch apiで取得して描画するので、子要素にあるstateが更新されない。 useEffectでデータフェッチすると起こる問題
// Client-side Runtime Data Fetching const [starsCount, setStarsCount] = useState(0) useEffect(() => { // get data from GitHub api fetch(`https://api.github.com/repos/gatsbyjs/gatsby`) .then(response => response.json()) // parse JSON from request .then(resultData => { setStarsCount(resultData.stargazers_count) }) // set data for the number of stars }, [])
ajax
Reactで配列データが空
【React】useEffectを使った非同期通信処理を理解しよう qiita.com
アダルトカテゴリーを初回表示時に除去、アダルトカテゴリークリックすると表示
const removeadult = book.filter((post) => { //console.log(post.Category) const cate =post.Category.split(',') return [...cate].filter(item => !cate.includes('アダルト') && !category.includes('写真集')).length > 0 //return book.Category === category }); setShowPosts(removeadult);
graphqlに今日の日付を入れたかったのだが、やり方が分からなかったので。ただ、このやり方ではだめかなという感じがした。 tomiko0404.hatenablog.com
query MyQuery($slug: Date!) { allJson(filter: {Day: {eq: $slug}}) { edges { node { Asin Booktype Category Contributor Day(formatString: "") ImageURL Points Price Publisher Title URL } } } }
variables { "slug": "20250101" }
クエリ文字列の取得