【发布时间】:2021-05-04 11:39:05
【问题描述】:
根据文档
useSelector(selector: Function, equalityFn?: Function)
useSelector 接受两个参数,第二个是可选的,因为默认情况下它比较严格 === 引用相等检查,但不比较浅相等。
const state = useSelector(state => {
console.log("useSelector rerendering");
return state.counter
}, shallowEqual)
另一个是
const state = useSelector(state => {
console.log("useSelector rerendering");
return state.counter
})
在这两种情况下,当 redux 存储状态发生变化时,组件会重新渲染,并且当本地状态发生变化时,它将渲染(在 useSelector 中打印 console.log)
我真的不明白它是如何工作的
完整的源代码
import React, { useState } from 'react'
import { shallowEqual, useDispatch, useSelector } from 'react-redux'
import { decrement, increment } from './store/actions'
export default function CounterHooks(props) {
const [submit, setSubmit] = useState(false)
const state = useSelector(state => {
console.log("useSelector rerendering");
return state.counter
}, shallowEqual)
const dispatch = useDispatch()
console.log("component rerendering");
const increments = () => {
dispatch(increment());
}
const decrements = () => {
dispatch(decrement());
}
const submitButton = () => {
console.log("component submit", submit);
setSubmit((previousState) => !previousState)
}
return (
<div>
<button onClick={increments} >Incrmeent Counter</button>
<br />
<button onClick={decrements} >Decrement Counter</button>
<br />
<button onClick={submitButton} >Submit</button>
<br />
<h2>total : {state.count}</h2> <br />
<h2>Submit:{String(submit)}</h2> <br />
</div>
)
}
我的问题是第二个参数究竟是如何工作的?
【问题讨论】:
-
您的实际问题是什么?这里的行为是否与您想象的不同?
-
@phry.第二个参数的工作原理。我看不出有什么区别
标签: reactjs redux react-redux