gpt4 book ai didi

javascript - reducer 没有返回预期的空对象

转载 作者:行者123 更新时间:2023-12-01 03:12:58 26 4
gpt4 key购买 nike

在这里使用 React-redux 并遇到一些问题,你们中的一些人可能会帮忙解决。

用户可以创建“职位”(帖子),也可以删除它们。添加它们没有问题,并且 reducer 返回预期的结果。但是,一旦我从(firebase)数据库中删除作业,我就会触发当前作业的新获取,但 reducer 仍然返回旧作业。我错过了什么吗?

删除之前,作业对象如下所示:

activeJobs= {
-KrkPPy4ibSraKG-O49S: {
title: 'Help',
location: 'etc,
...
},
-KrkPPy4ibSraKG-O49S: {
title: 'Help',
location: 'etc,
...
} and so on
}

当我将它们全部删除时,我会从服务器取回此 {}。预期的。出乎意料的是,我的 reducer 仍然返回旧作业,并且我的组件不会重新渲染。

我在获取作业后调度一个操作:

firebase.database().ref(`/jobs/activeJobs/${currentUser.uid}`)
.on('value', snapshot => {

console.log('new activeJobs ===', snapshot.val());

dispatch({
type: FETCH_JOBS_SUCCESS,
payload: snapshot.val()
});
});

snapshot.val() 确实包含新更新的作业。

然后这是处理该操作的 reducer :

switch (action.type) {
case FETCH_JOBS_SUCCESS:

// ...state contains the OLD jobs and action.payload contains {}. Why is is not overriding it the old jobs?

return { ...state, ...action.payload };
default:
return state;
}

为什么我的 reducer 出现故障?

最佳答案

{ ...state, ...action.payload } 语法的实际含义是:通过获取 state 的每个 props 并添加每个 props 来构建一个新对象action.payload。在你的例子中,你只是得到一个类似于状态的新对象,因为 ...action.payload 是一个空对象。

关于javascript - reducer 没有返回预期的空对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45737015/

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