在 javascript 类中获取数据是一个好习惯constructor()
吗?
例如,在 react 类中constructor()
,我发现的每个教程componendDidMount()
都在constructor()
.
问题完全涉及 javascript 类,而不仅仅是react
.
在 javascript 类中获取数据是一个好习惯constructor()
吗?
例如,在 react 类中constructor()
,我发现的每个教程componendDidMount()
都在constructor()
.
问题完全涉及 javascript 类,而不仅仅是react
.
在安装组件之前调用构造函数(如#constructor 文档中所述:https ://reactjs.org/docs/react-component.html )。
要回答你的问题,解释在于react组件的生命周期以及状态变化时需要重绘。通过在构造函数中进行异步调用,您可以在安装组件之前触发 setState。
在构造函数中进行异步调用会干扰重新渲染,并且如果您在构造函数中调用 setState,您的组件有时不会重新渲染。
来自文档:
您不应在构造函数() 中调用setState()。相反,如果您的组件需要使用本地状态,请直接在构造函数中将初始状态分配给 this.state:
避免在构造函数中引入任何副作用或订阅。对于这些用例,请改用 componentDidMount()。
类构造函数是一个函数,只有在函数在 DOM 中第一次初始化时才会被调用。在平凡的语言行为中,只有当我们使用 new 关键字实例化一个类时,它的构造函数才会被调用。现在,如果我们在 Javascript Classes 构造函数中获取数据:
如果作为 React,如果获取的数据负责与 DOM(UI)交互,则它会失败,因为 DOM 仅在组件安装后准备就绪,由 componentDidMount 保证。
当组件重新渲染时,数据获取函数也不会被调用,因为构造函数只被调用一次,因此数据不会更新 UI(DOM)
构造函数通常用于默认值分配和声明与类相关的属性。
Javascript 在 ECMAScript2015 中引入了类。它们主要是 Javascript 基于原型的继承的语法糖。React 有一个类类型Component
,它带有生命周期方法和其他一些好东西,您可以在此处阅读更多相关信息。
一般来说,最好的做法是在生命周期方法中获取数据componentDidMount
。您的组件需要一个地方来放置检索到的数据,并且在调用此生命周期方法时,您可以确保render()
至少已调用一次。