【发布时间】:2018-11-06 17:02:55
【问题描述】:
所以我现在已经开始使用 React 钩子了。我已经用 API 试验了一段时间了。我真的很喜欢将状态带入功能组件的想法。但是有一件事一直困扰着我,当我尝试使用它时,它感觉不对劲。我尝试在RFCs 上发帖,但现在那里太拥挤了。一切似乎都消失了。
这是我的示例中的一段代码。
import React, { useState } from "react";
function Counter() {
const [counterState,incrementCounterState] = useCommontState(0);
function doSomething (){
// does something and then calls incrementCounterState
// with the updated state.
}
return (
<div>
<p>{counterState}</p>
<button onClick={incrementCounterState}>increase</button>
....
.... // some jsx calling local scoped functions.
....
</div>
);
}
function useCommontState(defaultValue){
var [state, setState] = useState(0);
function increment(){
setState(defaultValue+=1);
}
return [state, increment]
}
export default Counter;
我可以轻松取出 state 和 setState 方法并创建自定义 hook 但我的问题在于组件使用的本地函数。由于状态现在是组件的一部分,因此在某些情况下,某些逻辑将决定下一步如何处理状态。
此外,当组件在状态更改时重新渲染时,所有内容都会重新初始化。这是我的问题。我知道useState 有自己的方式来处理这个问题。但我的问题在于我自己的功能。点击处理程序。在更改事件、子组件的回调等上,所有这些都将在每次组件呈现时重新初始化。我觉得这不对。
有什么方法可以解决这个问题。这是一个新的 API。我们甚至不确定它是否会变成react 17。但是有没有人遇到过更好的方法呢?
【问题讨论】:
-
不确定我是否理解您的担忧,但我之前玩过一次,最后用
useEffect(() => doSomething(), [false])做一次初始化工作,有点像componentDidMount- 请参阅reactjs.org/docs/… -
我猜人们的反应是,功能重新初始化的成本与它解决的其他问题相比微不足道。
标签: javascript reactjs react-hooks