Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Reactjs 反应挂钩-防止深度比较导致无限重渲染_Reactjs_React Hooks - Fatal编程技术网

Reactjs 反应挂钩-防止深度比较导致无限重渲染

Reactjs 反应挂钩-防止深度比较导致无限重渲染,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)

我正在使用一个react钩子,如下所示

我等待用户对象通过useSelector react redux钩子加载,然后更新th
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(查询)
}