実現したいこと
ReactにてFullCalenderを用いてカレンダーアプリを実装しています。
APIで取得した特定の日付リストに対してクラスを付与したいと考えています。
発生している問題
そこで次のコードを実装しましたが、初回レンダリング時にクラス付与が行われません。(axiosまでは実行されているようです)
React内(特にuseLayoutEffect)内でのDOM操作について、あまり知見がなくご教授いただけましたら幸いです。
Calender.js(関連箇所)
1let availableDateList = []; 2 3const Calender = () => { 4 const setAvailableDateListClass = () => { 5 availableDateList.map((availableDate) => 6 document 7 .querySelectorAll('[data-date="' + availableDate + '"]') 8 .forEach((date) => date.classList.add("available")) 9 ); 10 }; 11 useLayoutEffect(() => { 12 const fetchData = async () => { 13 const res = await axios(API_URL); 14 let data = await res.data; 15 data.map((e) => availableDateList.push(e.date)); 16 }; 17 fetchData(); 18 setAvailableDateListClass(); 19 }, []); 20 21 const calenderRenderHandling = (e) => { 22 setAvailableDateListClass(); 23 }; 24 25 26 return ( 27 <> 28 <FullCalendar 29 plugins={[dayGridPlugin, interactionPlugin]} 30 initialView="dayGridMonth" 31 events={callenderEvents} 32 eventOverlap={false} 33 datesSet={calenderRenderHandling} 34 /> 35 </> 36 ); 37}; 38export default Calender; 39
package.json
1"axios": "^0.27.2", 2"react": "^18.1.0", 3"react-dom": "^18.1.0", 4 "react-scripts": "^5.0.1", 5 "@fullcalendar/daygrid": "^5.11.0", 6 "@fullcalendar/interaction": "^5.11.0", 7 "@fullcalendar/react": "^5.11.1",
あなたの回答
tips
プレビュー