【问题标题】:Can I passing function instead of array as second argument to React.useMemo我可以将函数而不是数组作为第二个参数传递给 React.useMemo
【发布时间】:2022-04-12 08:26:49
【问题描述】:
我可以将array.map(val) => val 作为第二个参数传递给React.useMemo() 钩子吗?
我从服务器接收一个嵌套对象作为响应,我不能为第二个参数给出这个响应,因为useMemo() 只是检查对象的实例,所以我决定映射我的响应并返回子对象的一些属性的数组和将它们作为useMemo() 的第二个参数的数组传递。
关于这个问题有更好的想法吗?
这样的事情可以吗?
【问题讨论】:
标签:
javascript
reactjs
react-hooks
react-usememo
【解决方案1】:
您必须将数组传递给备忘录的第二个参数,所以答案是否定的。
但是如果你的意思是把一个对象传递给依赖数组,那么它取决于。
这个对象会改变吗?如果答案是肯定的,你的备忘录也会改变,你可能想要也可能不想要。
请记住,您可以拥有两个相似的对象{foo: 'bar'} 和{foo: 'bar'},它们是不同的实例,因此即使服务器两次返回相同的数据,每次都会执行备忘录。如果这就是您想要的,请使用 [{foo: 'bar'}] 作为依赖项。
如果您不希望在两个对象相等但不相同时执行备忘录,则必须从对象中创建一些可预测的原始键,例如myObject.foo + myObject.bar。有些人使用 JSON.stringify 但我不建议这样做,JSON.stringify 不是确定性意味着您每次对相同对象进行字符串化时可能会获得不同的密钥
在这里你可以找到一些关于该主题的好读物,它涵盖了 useEffect 和 useMemo 并且有一个使用 isDeepEqual 的示例作为解决方法来比较两个对象是否相等
https://www.benmvp.com/blog/object-array-dependencies-react-useEffect-hook/