前提・実現したいこと
firebaseのデータベースから、投稿データを取得してreduxで管理したいのですが、timestampがらみのwarningが出ているので解消したいです。
発生している問題・エラーメッセージ
問題なく動作するのですが、dev toolのconsoleに以下のwarningが出てしまいます。
index.js:1 A non-serializable value was detected in an action, in the path: `payload.0.timestamp`. Value: t {seconds: 1621508698, nanoseconds: 794000000}
なぜこうなるかはわかっていて、firestoreから取得したデータの構造が下のようになっており
payload: Array(2) 0: area: "東京" cid: "37iehhsgnEggWFTEYmFR" spot: (3) [{…}, {…}, {…}] timestamp: t {seconds: 1621508698, nanoseconds: 794000000}
↑timestampの部分の構造がまずいので、これをpayloadとするとwarningが出るのかな、と思っています。
そこでgetしたデータをtoDate()メソッドを使って加工して
payload: Array(2) 0: area: "東京" cid: "37iehhsgnEggWFTEYmFR" spot: (3) [{…}, {…}, {…}] timestamp: 何年何月何日...
という形にできれば問題がないと思われるのですが、その方法がわかりません。調べてもgetしたデータの一部だけ加工する方法がヒットしませんでした。またget.then()の中で加工するのがいいのか、それともgetした後return querySnapshot.docs.mapの中で加工するのがいいのかも皆目検討がつきません。これから頑張って更に調べようと思いますが、わかる方がいたらご教授願いたいです。
該当のソースコード
Typescript
1export const fetchAsyncGetCourse = createAsyncThunk( 2 "task/getcourse", 3 async (area) => { 4 const querySnapshot = await db 5 .collection("posts") 6 .where("area", "==", area) 7 .orderBy("likeCount", "desc") 8 .orderBy("timestamp", "desc") 9 .limit(2) 10 .get() 11 .then(); 12 return querySnapshot.docs.map((postDoc) => 13 postDoc.data() 14 ); 15 } 16); 17 18... 19 extraReducers: (builder: any) => { 20 builder.addCase( 21 fetchAsyncGetCourse.fulfilled, 22 (state: any, action: PayloadAction<COURSE>) => { 23 return { 24 ...state, 25 course: action.payload, 26 }; 27 } 28 );
やったこと
async (area) => { const querySnapshot = await db .collection("posts") .where("area", "==", area) .orderBy("likeCount", "desc") .orderBy("timestamp", "desc") .limit(2) .get(); //以下書き換え const data = querySnapshot.docs.map((postDoc) => postDoc.data()); console.log(data[0].timestamp.toDate()); return data; }
と書き換えることで取得したpostデータの1つ目のtimestampを日付に直すことはできました。あとはこのデータを元のデータのtimestampデータに差し替えたいです。
//追記
元データのtimestampデータを日付に直すことができたのですが、やはり以下のバリデーションが出ました。。。
A non-serializable value was detected in an action, in the path: `payload.0.timestamp`. Value: Thu May 20 2021 20:04:58 GMT+0900 (日本標準時)
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。