Reactjs 反应挂钩-防止深度比较导致无限重渲染
我正在使用一个react钩子,如下所示 我等待用户对象通过useSelector react redux钩子加载,然后更新thReactjs 反应挂钩-防止深度比较导致无限重渲染,reactjs,react-hooks,Reactjs,React Hooks,我正在使用一个react钩子,如下所示 我等待用户对象通过useSelector react redux钩子加载,然后更新thuseFirestoreConnecthook使用的firebase查询 constmycomponent=()=>{ const[query,setQuery]=useState({ 收款:'账户', 查询:['userId','=',user.uid]] }) const user=useSelector(state=>state.firebase.profile)
useFirestoreConnect
hook使用的firebase查询
constmycomponent=()=>{
const[query,setQuery]=useState({
收款:'账户',
查询:['userId','=',user.uid]]
})
const user=useSelector(state=>state.firebase.profile)
useFirestoreConnect(查询)
useffect(()=>{
const userId=user.uid?user.uid?null
setQuery({
收款:'账户',
查询:['userId','=',null]]
})
},[user,initialQuery])
}
由于传递给useFirestoreConnect
的对象每次都是新的,因此它会无限期地强制重新渲染。为了实现这一点,我必须编写一些难看的代码,以确保我只是用对象的变异版本更新状态。这太可怕了。由于我的重新呈现仅以user.uid为条件,是否有办法“包装”useFirestoreConnect
,以便我只传递一个单数字符串进行简单比较
感谢您提供的任何见解,还是我的做法有误?您应该使用
usemo
强制为相同的输入参数返回相同的对象
constmycomponent=()=>{
const user=useSelector(state=>state.firebase.profile)
const query=useMoom(
() => ({
收款:'账户',
其中:['userId','=',user.uid?user.uid:null],
}),
[用户]
)
useFirestoreConnect(查询)
}