componentWillReceiveProps 和其他生命周期方法似乎是欺骗性的诱惑,为无经验的React编码器手中的代码带来不必要的复杂性和噪音。它们为什么存在?他们最典型的用例是什么?在不确定的时刻,我怎么知道答案是否存在于生命周期方法中?
答案 0 :(得分:9)
我现在已经使用了几个月的反应,我的大部分工作是从头开始创建一个大型应用程序。所以同样的问题在一开始就出现了。
以下信息基于在开发过程中学习并通过多个文档来实现正确。
正如问题所述,这里有几个反应生命周期方法的用例
componentWillMount()
componentDidMount()
state
初始化,基于父母传递的道具。 componentWillReceiveProps(nextProps,nextState)
shouldComponentUpdate(nextProps, nextState)
componentWillUpdate(nextProps,nextState)
this.setState()
,它将在componentWillReceiveProps或componentDidUpdate中完成 componentDidUpdate(prevProps,prevState)
componentWillUnmount()
在不确定的时刻,我怎么知道答案是否存在 生命周期方法?
我建议的类比
在组件本身中触发更改
在组件外部触发更改
以下是一些其他方案 -
状态/道具的更改是否需要修改DOM?
componentDidUpdate
状态/道具的更改是否需要更新数据?
componentWillUpdate
传递给孩子的道具被更改,孩子需要更新
shouldComponentUpdate
添加事件监听器
componentDidMount
致电api
来源 -
答案 1 :(得分:2)
最常用生命周期方法的一些典型用例:
componentWillMount:在初始渲染之前调用。用于进行AJAX调用。例如,如果您需要获取用户信息以填充视图,这是一个很好的地方。如果你确实有一个AJAX调用,那么在AJAX调用完成之前渲染一个不确定的加载栏会很好。我还使用componentWillMount调用setInterval并在页面呈现之前禁用Chrome的拖放功能。
componentDidMount:在组件渲染后立即调用。如果您需要访问DOM元素,则非常有用。例如,我已经用它来禁用复制和粘贴到密码输入字段。如果您需要了解组件的状态,则非常适合调试。
componentWillReceiveProps:组件接收新道具时调用。用于使用新道具设置状态而无需重新渲染。
答案 2 :(得分:0)
componentWillReceiveProps是Update lifce cycle方法的一部分,在渲染开始之前调用。最明显的例子是将新的道具传递给Component。例如,我们有一个Form Component和一个Person Component。表单组件有一个允许用户通过键入输入来更改名称的单个组件。输入绑定到onChange事件并在Form上设置状态。然后将状态值作为prop传递给Person组件。
import React from 'react';
import Person from './Person';
export default class Form extends React.Component {
constructor(props) {
super(props);
this.state = { name: '' } ;
this.handleChange = this.handleChange.bind(this);
}
handleChange(event) {
this.setState({ name: event.currentTarget.value });
}
render() {
return (
<div>
<input type="text" onChange={ this.handleChange } />
<Person name={ this.state.name } />
</div>
);
}
}
每次用户键入此内容都会启动Person组件的更新。调用Component的第一个方法是传递新prop值的componentWillReceiveProps(nextProps)。这允许我们将传入的道具与我们当前的道具进行比较,并根据值做出逻辑决策。我们可以通过调用this.props获取当前的props,新值是传递给方法的nextProps参数。