用生命谱写代码的赞歌

0%

关于 React 需要注意的小知识点

知识点

  1. setState() 是异步的
    this.setState() 会调用 render 方法,但不会立即改变 state 的值,state 是在 render 方法中赋值的。所以执行 this.setState() 后立即获取 state 的值是不变的。同样的直接赋值 state 并不会触发更新,因为没有调用 render 函数。可以在 setState 的第二个参数触发回调函数,如下所示:

    1
    2
    3
    4
    5
    6
    this.setState({
    curView: val,
    loadingSmall: true
    }, () => {
    this.loadData();
    });
  2. 组件的生命周期
    componentWillMount,componentDidMount 只有在初始化的时候才调用。
    componentWillReceivePorps,shouldComponentUpdate,componentWillUpdata,componentDidUpdate 只有组件在更新的时候才被调用,初始化时不调用。

  3. reducer必须返回一个新的对象才能出发组件的更新
    因为在 connect 函数中会对新旧两个 state 进行浅对比,如果 state 只是值改变但是引用地址没有改变,connect 会认为它们相同而不触发更新。

  4. 无论 reducer 返回的 state 是否改变,subscribe 中注册的所有回调函数都会被触发。

  5. 按需加载时如果组件是通过 export default 暴露出去,那么 require.ensure 时必须加上 default

    1
    2
    3
    require.ensure([], require => {
    cb(null, require('../Component/helloWorld').default)
    },'helloWorld')
  6. componentWillUpdate 中可以直接改变 state 的值,而不能用 setState

  7. 如果使用 es6class 类继承 react 的 component 组件,constructor 中必须调用 super,因为子类必须用 super 继承 component 的 this,否则实例化的时候会报错。

  8. 组件卸载之前,加在 dom 元素上的监听事件和定时器需要手动清除,因为这些并不在 react 的控制范围内,必须手动清除。指的是在 this.refs.xxx 这种真实 dom 上 addEventListener 这样添加的监听事件,在组件卸载的时候要手动清除(removeEventListener),react 组件上的 onClick 这种不用管, react 帮我们处理好了。