javascript - 我可以在 useMemo 中安全导航吗

标签 javascript reactjs react-hooks

我可以在 useMemo 的第二个参数中使用 && 风格的安全导航或 lodash get 吗:

useMemo(() => {
  return {
    ...
  }
}, [state && state.data])  // or with lodash: get(state, 'data')

最佳答案

是的,但并非没有警告。

React Hook useMemo has a complex expression in the dependency array. Extract it to a separate variable so it can be statically checked. (react-hooks/exhaustive-deps)eslint

export default function App() {
  const [state, setState] = useState({ data: 'foobar' });

  const memoizedState = useMemo(() => {
    return state.data + state.data;
  }, [state && state.data]);

  return (
    <div className="App">
      <h1>Hello CodeSandbox</h1>
      <h2>{memoizedState}</h2>
    </div>
  );
}

Edit festive-wozniak-z80q5

更好的解决方案是将其分解为建议的单个变量,或者使用整个状态值并在内部处理它。请记住,引用突变的表面积越小,您内存的值就越稳定。

如果您确定这样的状态值将始终具有该形状,那么我认为您可以安全地使用state.data作为依赖项。

我通常更喜欢在react useState钩子(Hook)中使用复杂的对象(你当然可以),并将对象属性分解为它们自己的状态钩子(Hook)。这允许您更新状态的“部分”,而无需改变对其余部分的引用。这在像您这样的情况下尤其有利,您可能不确定 state.a.b.c.data 是完整且有效的已定义对象引用。或者其他一些钩子(Hook)依赖于组件状态的一部分。

关于javascript - 我可以在 useMemo 中安全导航吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60718269/

相关文章:

javascript - 使用模态弹出窗口附加表 tr

javascript - 了解回调函数参数

javascript - React Hook 表单 Controller 问题

reactjs - React - 状态数组删除数组中的最后一项而不是指定的索引

javascript - 如何在React js中找出带有键的数组元素

javascript - 向 XMLHttpRequest.onload 传递额外的参数

javascript - jQuery Sidebar Sliding Menu - 将按钮链接到特定幻灯片,每个链接都没有重复功能

reactjs - 为什么Ant设计中没有 `<Input>`的onchange

javascript - 如何在 react 中使用另一个文件中的 Prop ?

unit-testing - 如何在 `click` AppBar 的图标按钮上测试 `material-ui` 事件?