[英]How to mutate complex object with nested array with SWR?
TL;博士:
如何在嵌套數組(例如data.posts.votes
)中傳播新的 object 並從data
中保留所有現有的 state
完整信息:
我獲取的數據如下所示:
我想要一個投票功能,在上面的截圖中的votes
數組中添加一個新的vote
object。
我現在真的沒有計划如何在來自swr
的變異 function 中執行此操作:
現在我有這樣的但那行不通:
mutate(
`/api/subreddit/findSubreddit?name=${fullSub.name}`,
(data) => {
console.log(data);
return {
...data,
posts: (data.posts[postid].votes = [
...data.posts[postid].votes,
{ voteType: "UPVOTE" },
]),
};
},
false
);
我怎樣才能樂觀地更新這個?
我認為你的方法應該是這樣的:
mutate(
`/api/subreddit/findSubreddit?name=${fullSub.name}`,
async (data) => {
console.log(data);
return {
...data,
posts: data.posts.map((post) => {
if (post.id === postid) {
return {
...post,
votes: [...post.votes, { voteType: "UPVOTE" }],
};
} else {
return post;
}
}),
};
},
false
);
嘗試使用immer
produce(data, draft => {
const post = draft.posts.find( p => p.id === postId);
post.votes.push(newVote);
})
沒有笨拙的價差,所有這些都是不可變的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.