gpt4 book ai didi

javascript - React.useEffect 在依赖项发生变化时不会触发

转载 作者:行者123 更新时间:2023-12-05 08:03:31 30 4
gpt4 key购买 nike

编辑:我找到了解决办法!请参阅下面我的回答。

所以本质上,我有一个正在更新但不触发将其作为依赖项的 useEffect 的状态片段:

const [editableParticipants, setEditableParticipants] = useState(*initial value*);
const [joinLeftTimeState, setJoinLeftTimeState] = useState(*initial value*);

function addParticipant(newParticipant) {
setEditableParticipants([
...editableParticipants,
newParticipant
])
}

useEffect(() => {
setJoinLeftTimeState(
editableParticipants.map(*mapping stuff*)
);
}, [editableParticipants]);

当 addParticipant 被触发时,editableParticipants 正在成功更新,但效果并未运行,使 joinLeftTimeState 没有新参与者的条目。我在效果本身中放置了一个控制台日志,它在 addParticipant 运行后根本不会触发。什么鬼?

最佳答案

所以这里的问题有点复杂,但我会尽力总结一下。

本质上,渲染器试图在 joinLeftTimeState 上为在效果触发之前添加的参与者执行 .find(editableParticipants 已更新,但 joinLeftTimeState 尚未更新),导致一切碰撞。如果 .find 变为空,则添加默认值允许代码继续进行,现在效果正确触发。

function Table() {
const [editableParticipants, setEditableParticipants] = useState(*initial
value*);
const [joinLeftTimeState, setJoinLeftTimeState] = useState(*initial value*);

function addParticipant(newParticipant) {
setEditableParticipants([
...editableParticipants,
newParticipant
])
}

useEffect(() => {
setJoinLeftTimeState(
editableParticipants.map(*mapping stuff*)
);
}, [editableParticipants]);

return editableParticipants.map(
ptcpnt => <Row joinLeftTimeState={joinLeftTimeState} participant={ptcpnt} />
)
}

function Row({ joinLeftTimeState, participant }) {
const defaultTimes = { a: '', b: '' };
const userTimes = joinLeftTimeState.find(
ptcpnt => ptcpnt.id === participant.id
)
const { a, b } = userTimes || defaultTimes;

return (*stuff*)
}

异步状态更新的乐趣,对吗?感谢所有的想法!

关于javascript - React.useEffect 在依赖项发生变化时不会触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72393420/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com