惰性初始状态 - 什么是以及如何使用它?

IT技术 reactjs react-hooks
2021-04-14 13:48:59

我是 React Hooks 的新手!我试图在我的代码中使用 useState。当我使用它时,我发现了一个术语“懒惰的初始状态”

https://reactjs.org/docs/hooks-reference.html

const [state, setState] = useState(() => {
  const initialState = someExpensiveComputation(props);
  return initialState;
});

但是我想不出任何用例,这种懒惰的状态初始化会有用!

就像说我的 DOM 正在渲染并且它需要状态值,但是我的 useState 还没有初始化它!并且说如果你已经渲染了 DOM 并且useState ExpensiveComputation已经完成,DOM 会重新渲染!!

任何帮助都会有用!

1个回答

传递给的参数useStateinitialState,该值在第一次渲染中初始化您的状态,并在随后的渲染中被忽略。但是想象一下下面的情况

const Component = () =>{
    const [state, setState] = useState(getInitialHundredItems())
}

想象一下这在每次渲染时被不必要地调用(请记住,即使在下一次渲染时忽略初始值,初始化它的函数仍然会被调用)。

对于这样的用例,而不是仅仅提供一个值,您可以传递一个function返回初始状态的值,这个函数只会执行一次(初始渲染),而不是像上面的代码那样在每次渲染时执行

const Component = () =>{
    const [state, setState] = useState(getInitialHundredItems)
}
那可能是useState(getInitialHundredItems)对的?
2021-05-28 13:48:59
是的。但为了演示的目的() => func()更容易理解
2021-05-30 13:48:59
解释得好!!谢谢,我明白了!
2021-06-08 13:48:59
“请记住,即使在下一次渲染时忽略初始值,初始化它的函数仍然会被调用”。在后续渲染中调用初始化状态的函数有什么意义?是否包含react.js用于比较不同渲染的状态值的功能
2021-06-17 13:48:59
是的!你可以假设react做一个比较像if(typeof initialValue === 'function') initialValue(). 请注意,这显然是伪代码
2021-06-21 13:48:59