我有一个连接到redux存储的组件,我有一个代码块,如下所示:
if (this.props.person !== nextProps.person) {
...
} else {
...
}
...
MyComponent.propTypes {
person: PropTypes.object.isRequired
}
以这种方式检查对象引用是否安全?我可以假设在reducer对象中引用总是会改变吗?
答案 0 :(得分:2)
只要您的减速器是纯功能,它就是安全的。为了保证纯度,这些是减速器中你不应该做的三件最重要的事情:
如果您的reducer满足所有3个条件,则调度的任何特定操作最终会修改状态树中的person
属性,将导致新人object
。
在这种情况下,this.props.person
和nextProps.person
将是两个不同的对象,并且对象引用检查将是正确的。但是,如果调度的特定操作未修改状态树中的person
属性,则this.props.person
和nextProps.person
仍将是同一个对象
答案 1 :(得分:0)
考虑一个简单的reducer:
function reducer(state, action) {
switch(action.type) {
...
default:
return state
}
}
这是redux的正常部分 - 如果使用未知操作调用reducer,它将返回相同的状态。在这种情况下,this.props.person === nextProps.person
,因为对象引用没有改变。
如果您的代码(缩减器)更改了person
的引用,则引用也会在您的组件中发生更改。