在这里使用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;
}
为什么我的减速机出现故障?
答案 0 :(得分:2)
{ ...state, ...action.payload }
语法实际上意味着:通过采用state
的每个道具并添加action.payload
的每个道具来构建新对象。在您的情况下,您只需获得一个与state类似的新对象,因为...action.payload
是一个空对象。
答案 1 :(得分:0)
将您的操作更改为
return Object.assign({}, state, {activeJobs : action.payload});