知识点
setState()是异步的
this.setState()会调用render方法,但不会立即改变 state 的值,state 是在 render 方法中赋值的。所以执行this.setState()后立即获取 state 的值是不变的。同样的直接赋值 state 并不会触发更新,因为没有调用 render 函数。可以在setState的第二个参数触发回调函数,如下所示:1
2
3
4
5
6this.setState({
curView: val,
loadingSmall: true
}, () => {
this.loadData();
});组件的生命周期
componentWillMount,componentDidMount只有在初始化的时候才调用。
componentWillReceivePorps,shouldComponentUpdate,componentWillUpdata,componentDidUpdate只有组件在更新的时候才被调用,初始化时不调用。reducer必须返回一个新的对象才能出发组件的更新
因为在connect函数中会对新旧两个state进行浅对比,如果 state 只是值改变但是引用地址没有改变,connect 会认为它们相同而不触发更新。无论 reducer 返回的 state 是否改变,
subscribe中注册的所有回调函数都会被触发。按需加载时如果组件是通过
export default暴露出去,那么require.ensure时必须加上default。1
2
3require.ensure([], require => {
cb(null, require('../Component/helloWorld').default)
},'helloWorld')componentWillUpdate中可以直接改变 state 的值,而不能用setState。如果使用 es6class 类继承 react 的 component 组件,
constructor中必须调用super,因为子类必须用super继承 component 的this,否则实例化的时候会报错。组件卸载之前,加在 dom 元素上的监听事件和定时器需要手动清除,因为这些并不在 react 的控制范围内,必须手动清除。指的是在 this.refs.xxx 这种真实 dom 上 addEventListener 这样添加的监听事件,在组件卸载的时候要手动清除(removeEventListener),react 组件上的 onClick 这种不用管, react 帮我们处理好了。