我使用react创建了一个类似于twitter的框。我正在查看发现几个组件生命周期的react文档但不确定应该使用哪一个来提高我的代码性能:componentDidMount
或componentWillMount
?
当我在文本框中输入内容时,我在控制台中看到一个更新文本框值的更新。任何人都可以帮我理解使用哪种方法以及何时使用?
https://jsfiddle.net/c9zv7yf5/2/
class TwitterBox extends React.Component {
constructor(props) {
super(props);
this.state = { enteredTextBoxvalue : '' };
this.handleChange = this.handleChange.bind(this);
}
handleChange(event) {
this.setState({enteredTextBoxvalue: event.target.value});
if((event.target.value).length > 3) {
this.setState({className : 'wholeContainer'});
//console.log("long characters");
}
}
render() {
return (<div>Hello {this.props.name}
<textarea className={this.state.className}
value={this.state.enteredTextBoxvalue}
onChange = {this.handleChange}>
there should be only 140 characters
</textarea>
</div>);
}
}
ReactDOM.render(
<TwitterBox name="World" />,
document.getElementById('container')
);
答案 0 :(得分:0)
在组件呈现之前调用componentWillMount。 在渲染组件后立即调用componentDidMount。
如果您需要准备数据,请使用componentWillMount。 componentDidMount通常用于在组件呈现后立即发送api调用或抓取数据,强烈建议使用它。
答案 1 :(得分:0)
<强> componentWillMount:强>
在组件的第一次渲染之前调用此函数,因此乍一看它似乎是放置数据获取逻辑的理想位置
<强> componentDidMount:强>
使用componentDidMount可以清楚地表明,在初始渲染之后才会加载数据。这会提醒您正确设置初始状态,因此不会导致导致错误的未定义状态。
答案 2 :(得分:0)
您的问题的一部分是关于绩效,您可以考虑考虑shouldComponentUpdate
到avoid reconciliation。
在安装发生之前立即调用componentWillMount。它在render()之前调用。
在安装组件后立即调用componentDidMount。
答案 3 :(得分:0)
<强> componentWillMount 强>
constructor
setState()
将不会触发
因为组件尚未渲染而重新渲染/api
请求(从技术上讲,在安装组件之前没有保证它们会完成,在这种情况下,您的组件将不会被重新呈现以应用这些数据)<强> componentDidMount 强>
/api
请求等