gpt4 book ai didi

reactjs - 如何在React中的无状态函数组件中初始化类实例?

转载 作者:行者123 更新时间:2023-12-03 16:30:00 25 4
gpt4 key购买 nike

通常使用状态模式,在构造函数中初始化一种帮助程序类,并在某些组件生命周期方法中使用其方法,如下所示:

class StatefulComponent extends Component {
constructor(props) {
super(props);
this.helper = new HelperClass();
}

componentDidMount() {
this.helper.doSomething();
}

}

现在,我想将相同的逻辑转换为如下所示的无状态函数组件:
const StatelessFunction = (props) => {
this.helper = new HelperClass();

useEffect(() => {
this.helper.doSomething();
}, []);

}

但是当我看到这个组件从一开始就被称为每个 Prop 更改时,我感到担心。
这让我觉得我的类实例是一遍又一遍地创建的。
我错了吗?我可以采取什么措施来防止重新创建类(class)并改用ref?

我遇到了 useRef,但不确定是否适合我的情况。

最佳答案

回顾此评论和一些评论,我可以看到不能信任useMemo不再运行HelperClass构造函数,而useRef只会在第一次渲染后设置助手,因为它的初始值不能用作函数。可能useState是执行此操作的最简单,最可靠的方法:

const [helper] = useState(()=>new HelperClass());
您可以使用useMemo创建HelperClass的实例,并使用useEffect对其进行调用。给它们两个空的依赖项数组意味着它们将仅被称为“挂载”。我在引号上加上了mount,因为备忘录将仅在第一次渲染时调用,而效果将在第一个渲染周期结束后调用。
const StatelessFunction = props => {
const helper = useMemo(() => new HelperClass(), []);
useEffect(() => {
helper.doSomething();
}, [helper]);
return (<JSX />);
};
如果您唯一要做的就是调用doSomething,并且不再使用辅助实例,则可以使用useEffect进行操作:
useEffect(() => {
new HelperClass().doSomething();
}, []);
如果确实打算在以后使用帮助程序实例,则可以将前面的示例与useMemo或useRef一起使用:
const helper = useRef();
useEffect(() => {
helper.current = new HelperClass();
//only called once after first render
helper.current.doSomething();
}, []);
//you still have the helper instance as helper.current

关于reactjs - 如何在React中的无状态函数组件中初始化类实例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58290411/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com