第二章,UI交互
一个简单例子:
import React, {Component} from 'react';
import {render} from 'react-dom';
export default class LikeButton extends Component {
state = {liked: false}
// ES6+ React不会自动绑定实例对象this到方法上,
// 所以需要使用箭头函数,或手动进行绑定。
handleClick = event => {
this.setState({liked: !this.state.liked});
}
render() {
return (
<p onClick={this.handleClick}>
You {this.state.liked? 'like': 'haven\'t liked'} this.
Click to toggle.
</p>
);
}
}
render(<LikeButton />, document.getElementById('app');
事件代理
React不会将事件处理方法绑定到对应的DOM上,当React启动时,它会用一个事件监听器来监听它所管理的所有组件的事件。当组件挂载或者移除的时候,它仅仅是增加或移除一个内部映射。当事件发生时,React会通过该映射来调用对应组件的事件处理方法。
组件即是状态机。
this.state
与UI的状态一一对应。
State工作原理
通过this.setState(data, callback)
来改变组件的state。这个方法将data赋值给this.state
,然后重新渲染组件。当组件渲染完毕后callback会被调用。
state 最佳实践
- 保持组件拥有较少的state。
- state中包含最少的能表达你UI状态的数据,不应该包含计算过的数据、组件、从props中复制的数据。
- 一些组件[子组件]只负责渲染,通过一个组件[顶层组件]来管理state。通过props来传递状态变化。