javascript - React如何在生命周期方法中处理对象严格相等

标签 javascript reactjs redux react-redux

我的理解是,react 使用严格的相等性检查,所以如果你使用使用不可变状态的 redux,相等性检查是否每次都会失败?

例如,我在阅读的一篇文章中看到了以下代码片段:

componentDidUpdate(prevProps) {
//Typical usage, don't forget to compare the props
 if (this.props.user !== prevProps.user) {
   this.fetchData(this.props.user.userName);
 }
}

如果传入的 props 对象来自 redux 并且用户属性是一个对象或数组,它将有一个不同的引用,并且每次检查都会失败。

这是正确的吗?

如果是这种情况,React Redux 优化组件是否会重新渲染我手动深度检查从 HOC 中的 mapStateToProps 返回的对象值?或者这也总是会失败?

谢谢

最佳答案

您只能对原始值进行严格相等,而不能对对象进行严格相等。

所以你应该按如下方式定义函数:

function isEquivalent(a, b) {
    // Create arrays of property names
    var aProps = Object.getOwnPropertyNames(a);
    var bProps = Object.getOwnPropertyNames(b);

    // If number of properties is different,
    // objects are not equivalent
    if (aProps.length != bProps.length) {
        return false;
    }

    for (var i = 0; i < aProps.length; i++) {
        var propName = aProps[i];

        // If values of same property are not equal,
        // objects are not equivalent
        if (a[propName] !== b[propName]) {
            return false;
        }
    }

    // If we made it this far, objects
    // are considered equivalent
    return true;
}

或者您可以使用 lodash 函数:

_.isEqual(object1, object2)

关于javascript - React如何在生命周期方法中处理对象严格相等,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57550414/

相关文章:

javascript - 允许在 tbody 内水平和垂直滚动表格

javascript - jQuery 每次在同一元素上运行多次

html - React - 使用根元素上的数据将参数传递给应用程序

javascript - 未捕获的语法错误 : embedded: JSX value should be either an expression or a quoted JSX text (8:26)

javascript - 在jquery中的url( anchor )中获取许多#hash值

php - 在多个网页中包含相同的表单

html - React 中的 SVG 图标不显示

javascript - react : How to wait until ref is available when inserted (rendered) within a second container

reactjs - 使用 redux saga 时等待 redux action 完成调度

javascript - 使用 Redux 让 React 组件执行一次性操作?