提问人:Green 提问时间:7/3/2019 更新时间:7/3/2019 访问量:168
为什么 react-redux 将状态与标识 (===) 运算符进行比较?对象不能以这种方式进行比较
Why does react-redux compare state with the identity (===) operator? Objects can't be compared that way
问:
我正在阅读 的组件(https://github.com/reduxjs/react-redux/blob/master/src/components/Provider.jsreact-redux
Provider
)
在两种情况下,它们使用标识 (===) 运算符比较对象。为什么会这样?我们不能以这种方式比较 JS 中的对象。究竟比较了什么?
componentDidMount() {
this.state.subscription.trySubscribe()
// One
if (this.previousState !== this.props.store.getState()) {
this.state.subscription.notifyNestedSubs()
}
}
componentDidUpdate(prevProps) {
// Two
if (this.props.store !== prevProps.store) {
this.state.subscription.tryUnsubscribe()
const subscription = new Subscription(this.props.store)
subscription.onStateChange = this.notifySubscribers
this.setState({ store: this.props.store, subscription })
}
}
答:
2赞
markerikson
7/3/2019
#1
是的,您绝对可以以这种方式比较值。您可以将任意两个值进行比较 - 这只是检查它们是否是指向内存中相同值的引用。===
具体来说,这两个检查是通过创建一个新的引用(通常是一个新的根对象)来确定 Redux 存储状态是否已经不可变地更新,以及该属性是否已更新为指向不同的存储实例。store
评论
===
===
Object reference? They are different
- 并非总是如此,这就是重点。它比较引用以检查它是否是同一个对象