在componentWillReceiveProps中检查对象引用是否安全?
Is it safe to check object reference in componentWillReceiveProps?
我有一个组件连接到redux存储,我有一个代码块,像这样:
if (this.props.person !== nextProps.person) {
...
} else {
...
}
...
MyComponent.propTypes {
person: PropTypes.object.isRequired
}
以这种方式检查对象引用是否安全?我可以假设在一个减速器对象引用将永远改变吗?
只要您的reducer是纯函数,它就是安全的。为了保证纯度,这是你不应该在reducer中做的最重要的3件事:
- 改变它的参数(使用Object。赋值或对象扩展操作符,以避免对象发生突变)
- 执行API调用和路由转换等副作用
- 调用非纯函数,例如Date.now()或Math.random()。
如果您的reducer满足所有3个条件,则任何被分配的特定操作最终修改了状态树中的person
属性,将导致一个新的人object
。
在这种情况下,this.props.person
和nextProps.person
将是两个不同的对象,并且对象引用检查将是正确的。然而,如果一个特定的动作没有修改状态树中的person
属性,this.props.person
和nextProps.person
仍然是相同的对象
考虑一个简单的减速器:
function reducer(state, action) {
switch(action.type) {
...
default:
return state
}
}
这是redux的一个正常部分-如果您的reducer被调用一个未知的操作,它返回相同的状态。在本例中是this.props.person === nextProps.person
,因为对象引用没有改变。
如果您的代码(您的reducer)将引用更改为person
,则该引用也将在您的组件中更改。
相关文章:
- 当eval只执行服务器端数据时,在javascript中使用eval是否安全
- 假设浏览器渲染为60 fps是否安全
- 如果条件将长 JavaScript 拆分为多行是否安全
- 如何检测在 Javascript 中使用“in”运算符是否安全
- 为用户应用程序托管 javascript 文件是否安全
- 使用AngularJS是否安全
- 在JavaScript源代码中使用UTF-8字符文字是否安全
- 每隔1秒调用一次jQueryajax是否安全
- 使用Ajax提交表单是否安全
- 重新触发Javascript事件是否安全
- 使用for.of迭代时删除集合中的元素是否安全
- jQuery(userInput)对最终用户来说是否“安全”
- JavaScript 在表单中注入密码是否安全
- 如果没有其他用户会看到未转义的用户输入,渲染它是否安全
- 是否安全应用是最佳实践
- 使用 Restangular 使用 RESTful API - RESTful API 将数组作为顶级对象返回是否安全
- 网络套接字是否安全
- 在循环时修改数组是否安全
- HTML 文本框值属性是否安全免受 XSS 攻击
- 在 JavaScript 中依赖全局本机对象是否安全,尤其是 Object 对象