Immutable.js 除了它是不可变的,还提供了深度的数据结构比较。
它允许提高 React 渲染性能,因为允许轻松实现 shouldComponentUpdate
方法或使用 react-immutable-render-mixin 。
但是,我只需要深入比较。有没有没有 Immutable.js
的深度数据结构比较的解决方案?
更新: 我有带有嵌入对象/数组的深度数据树。每个数组实体又可能包含另一个对象/数组等等。
@MatthewHerbst 我查看了您发布的链接。这在我看来是一组未经测试的车辆。此外,我不确定该解决方案是否可以与非常深的数据树(在数组中嵌入数组等)进行比较。
最佳答案
编写自己的深度比较器是一件微不足道的事情。甚至,如果你不太喜欢递归,你可以通过重用 immutableJS 库来“懒惰的方式”(我假设,你不介意只在一个地方使用 immutable.js)(使用 es6 语法):
const deepEquals = (a, b) => immutable.is(immutable.fromJS(a), immutable.fromJS(b))
但是,由于显而易见的原因,此解决方案效率不高。如果您关心性能(但由于某种原因,您仍然不喜欢 immutable.js),您可以使用以下方法:
代替:
myObj[newkey] = newval
用:
let modifiedA = {...myObj, newkey: newval}
这样,创建映射(和数组)的修改版本会花费更多的时间,但比较可以快得多(特别是,如果您的数据结构非常嵌套,但您的单个映射/数组没有很多直接键)
关于javascript - 提升 React 性能的 Immutable.js 替代方案,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32742914/