是useState的setter保证是一样的吗?

问题描述 投票:4回答:2

说我要创造往往希望useInputState钩:

function useInputState(initialValue) {
  const [value, setValue] = useState(initialValue);
  const onChange = useCallback(
    e => setValue(e.target.value), 
    [ /* ??? */ ]
  );
  return { value, onChange };
}

我需要的setValue setter函数添加到回调的依赖?我们能指望的setter始终保持不变?这似乎当我尝试它的工作,但是这是很好的做法?或者我们应该承担回调的关闭任何事情都可能发生变化并影响其实施?

(我能想到的更多的例子,最终提出同样的问题)

javascript reactjs react-hooks
2个回答
1
投票

是的,useState状态二传手是相同的功能;即使它不会,它预计将更新状态。它应该像这个问题说明了所用。

常见的用法是在useReducer documentation解释的更好:

useReducer,您还可以优化触发深更新组件的性能,因为你可以通过派遣下来,而不是回调。

useState uses useReducer internally

其中useState被称为有范围的关注只适用于useState状态值停留在使用它的一个回调的范围,例如相同this problem。如果当前状态应被使用,它应与状态更新器功能进行检索,象setValue(currentState => currentState + 1)


2
投票

是的,从useState setter和同样来自useReducer调度不改变。

This portion of the docs覆盖传递dispatch方法经由上下文的后续组件的图案和包含以下内容:

如果您使用的上下文来传递回落的状态下也一样,使用两种不同的上下文类型 - 调度方面不会改变,使阅读组件不需要重新呈现,除非他们也需要应用程序的状态。

© www.soinside.com 2019 - 2024. All rights reserved.