试着想象这里有两件事:
- 组件(COMPONENT)本身,以及
- 组件之外的东西(OUTSIDE):
组件内部的变化
您需要调用this.setState(),这将更新当前组件内部的状态,并随后触发此组件的更新(自动调用render())
来自外部的改变
这将触发这个 COMPONENT 的 props/newProps 被更新,随后你的组件通过在组件内部调用 this.setState() 来更新(componentWillReceiveProps 是来自 React 的生命周期方法)
class MyComponent extends React.Component {
// initially how the state is set to MyComponent
constructor(props) {
super(props);
this.state = {name: this.props.name};
}
// own method to be called inside MyComponent
updateName(e) {
const newName = e.target.value;
if (this.state.name !== newName) {
this.setState({name:newName});
}
}
// changes from the outside
componentWillReceiveProps(nextProps) {
const newName = nextProps.name;
if (this.state.name !== newName) {
this.setState({name:newName});
}
}
render() {
return(
<div>
{this.state.name}
<input type="text"
onChange={this.updateName.bind(this)}
value={this.state.name} />
</div>
)
}
}
值得指出的是 this.setState() 会自动触发 render(),而 this.state.name = 'Bob' 不会触发 render()。