【发布时间】:2019-02-12 00:43:56
【问题描述】:
我试图通过 reducer 在我的 react.js/redux 应用程序中设置一个深度嵌套的对象,但对象更改不会传播到我的组件。我应该如何更新和 mapStateToProps 这样的对象?
我已经尝试...在我的 reducer 中处理我的操作的有效负载,在我的 mapStateToProps 中映射一个更高级别的对象,并将我映射到我的组件道具的对象展平。
我的初始状态:
const initialState = {
myObject : {
prop1 : {
prop2 : {
array1 : [],
array2: [],
array3: []
}
}
}
}
我的减速机:
const app = (state = initialState, action) => {
switch(action.type) {
case SET_DATA:
return {
...state,
myObject: action.payload
};
} default:
return state;
}
export default app;
我的组件:
class Component extends React.PureComponent() {
render() {
return (
{
JSON.stringify(this.props.componentObject)
}
);
}
}
function mapStateToProps(state) {
return {
componentObject: state.myObject
};
}
export default connect(mapStateToProps)(Component);
更新嵌套对象的动作创建者
export function setData(newDeeplyNestedObject) {
return {
type: SET_DATA,
payload: newDeeplyNestedObject
};
}
结果是我的组件没有显示 Redux 的状态。 Redux 似乎没有检测到我的组件道具的变化,因此没有更新组件。谁能告诉我如何确保 Redux 在深度嵌套的对象结构发生变化时向我的组件发送更新?
我知道 Redux 对更新进行了浅层比较,但我觉得我的 reducer 中的 JSON.parse(JSON.stringify()) 在这里不是正确的方向。
【问题讨论】:
-
您的
mapStateToProps不正确,myObject在state.app中,但您正在state中寻找它。你需要做的:componentObject: state.app.myObject
标签: reactjs redux react-redux state