了解React生命周期挂钩

问题描述

我是React / React Native的新手,我刚开始在一家公司工作,因此从事现有项目。 问题是,在代码的开头,我无法理解此Creation Lifecycle Hooks:

export default class ListResult extends React.Component {
  constructor(props) {
    super(props);
    this.state.answers = props.navigation.state.params.answers;
    this.state.saving = props.navigation.state.params.saving;
    this.state.loading = false;
  }

  state = {
    answers: null,saving: false,loading: true,location: null,dialogLocation: false,latitude: '',longitude: '',};

  location = null;
  latitude = '';
  longitude = '';
}

有人可以给我一些解释,为什么他为什么要使用构造函数来初始化状态,然后再使用状态来定义变量,然后再为这些变量设置一些值?

解决方法

这是一个常见的错误,甚至在related docs中也有强调:

避免将道具复制到状态中! (在构造函数中)这是一个常见错误。 仅当您有意忽略道具更新时才使用此模式。

此代码应大致固定为:

class ListResult extends React.Component {
  state = {
    answers: null,...
  };

  componentDidMount = () => {
    const { answers,saving } = props.navigation.state.params;
    this.setState({ answers,saving });
  };
}

作为解释,他在“现代” React中同时使用了类实例和构造函数(为什么?),并使用了类组件you shouldn't use the constructor(而不是使用类属性)。

定义类后,首先评估类实例,然后调用构造函数,这就是为什么他在其实例中覆盖初始值。

,

在没有详细回答问题的情况下,我试图强调反应生命周期思维与常规JS DOM操作的区别。 如果您使用React,则可以使用JS代码而非真正的DOM来操纵所谓的“虚拟dom”。

虚拟dom的工作原理:如果dom树中任何组件的任何属性或状态发生变化,整个子dom树将被重新渲染。生命周期意味着您如何处理组件中的这些连续重新渲染。

但是不用担心。这并不意味着整个DOM每次都会重新渲染。在这个虚拟dom之上,有一个叫ReactDOM的家伙,它不断地比较虚拟dom状态并仅在真实DOM中进行必要的更改。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...