reactjs - redux 在商店更新时没有调用 mapStateToProps
问题描述
push
更新状态时不要使用。利用concat
我正面临这个非常奇怪的问题,考虑这个减速器:
export default function(state = null, action) {
console.log("Current State: ",state);
// on performing actions, it gives me:
// Current State: null
// Current State: Array [{}]
// Current State: Array [{}] -- all good
if(state === null) {
state = [
{id: 1, title: "Java"}
];
}
// UPDATED PART. FORGOT TO MENTION IT BEFORE
if(Action.type == "UPDATE_LIST") {
state.push( Action.payload ); // don't do that, this'll mutate your array and states are immutable
}
/////////////
return state; // this is the main problem
}
上面的代码不会mapStateToProps
在我的组件内部调用。但是,像下面这样修改上述减速器确实会调用mapStateToProps
:
return []; // instead of return state;
或者
return [ {id: 1, title: "Python"} ]; // instead of return state;
我在两种情况下都返回 instanceof Array [ state & [] ],但只有后一种情况mapStateToProps
在我的组件中调用。
这很奇怪,我不知道我该怎么做才能解决这个问题。
解决方案
redux 的重点是确保您的状态不是直接可变的。由于数组和对象在 Javascript 中通过引用传递,因此您的代码试图直接改变状态对象..这是不正确的。
总是通过返回新状态来改变状态。像这样:
export default function(state = null, action) {
let newState = [...state];
if(state === null) {
newstate = [
{id: 1, title: "Java"}
];
}
return newState;
}
推荐阅读
- docker - 如何在 gitlab 本地分支上挂载 docker 卷?
- python - 如何将 UTF-8 转换为转义字符串
- c#-4.0 - 多个等待流程
- c# - 单元测试 HttpContext.GetOwinContext()
- asp.net-core - asp.net核心表单标签助手:以@开头的属性被丢弃
- javascript - Vue js ajax调用后设置数据
- python - Python列表索引超出范围,即使在分隔索引之后
- hyperledger-fabric - 超级账本安装错误
- c# - XML 反序列化不起作用:返回空记录
- android - firebase-如果 valueEventListner 每毫秒触发一次怎么办?