美文网首页
React 的几个注意点

React 的几个注意点

作者: rxdxxxx | 来源:发表于2018-08-12 21:56 被阅读40次

受控组件和无状态组件

  • 非受控组件

    • 推荐使用受控组件来实现表单. 在受控组件中, 表单数据是有React组件处理
    • 如果让表单数据有DOM处理时, 替代方案为使用非受控组件
    • <input type="text" ref={input =>this._name = input} /> 如是, 不通过value控制其值,
  • 受控组件

    • <input type="text" value={this.state.name} onChange={this.handleNameChange}/>
    • 以上handleNameChange获取输入的值 this.setState({ name: event.target.value }); 赋值给state, 然后在触发刷新, 对用input的value赋新的值
  • 无状态组件

    • 语法简洁, 占内存小(少了class的诸多属性), 无副作用(纯函数), 函数式写法(柯里化)

    • 函数式组件: 使用props

      function Welcome(props) { return <h1>Hello, {props.name}</h1>; }

    • 状态组件/类组件的优点:

      • 可以使用this
      • 拥有局部状态: this.state
      • 声明周期钩子

生命周期流程

  • 父子组件嵌套的生命周期, 先初始化父组件, 在父组件的render组件中初始化子组件, 当子组件都创建完成后(都完成了componentDidMount方法后) 父组件执行componentDidMount

  • 启动过程

    father constructor
    father componentWillMount
    father render
    son constructor
    son componentWillMount
    son render
    son componentDidMount
    father componentDidMount
    
  • 组件更新过程

    son componentWillReceiveProps
    son shouldComponentUpdate 根据返回值 true/false 决定是否继续执行
    son componentWillUpdate
    son render
    son componentDidUpdate
    

setState() 执行流程, 生命周期.

  • 从源码全面剖析 React 组件更新机制---这个说的好,可以多看几遍

  • 利用队列机制管理state, 避免重复的view刷新

  • replaceState({}) 会完全替代原有的state, setState不会影响未涉及的state

  • 如果组件正处于创建或更新组件阶段,则把新的更新放入dirtyComponents稍后处理

    • 故getInitialState,componentWillMount, render,componentWillUpdate 中setState都不会引起updateComponent。但在componentDidMount和componentDidUpdate中则会。
  • 主要流程如下

    • 1.enqueueSetState将state放入队列中,并调用enqueueUpdate处理要更新的Component

    • 2.如果组件当前正处于update事务中,则先将Component存入dirtyComponent中。否则调用batchedUpdates处理。

    • 3.batchedUpdates发起一次transaction.perform()事务

    • 4.开始执行事务初始化,运行,结束三个阶段

      • 1.初始化:事务初始化阶段没有注册方法,故无方法要执行

      • 2.运行:执行setSate时传入的callback方法,一般不会传callback参数,

      • 3.结束:更新isBatchingUpdates为false,并执行FLUSH_BATCHED_UPDATES这个wrapper中的close方法

      • FLUSH_BATCHED_UPDATES在close阶段,会循环遍历所有的dirtyComponents,调用updateComponent刷新组件,并执行它的pendingCallbacks, 也就是setState中设置的callback。第二个参数?
        
  • 我的理解: setState 修改state是异步操作, 意思就是不能立即获取this.state 修改的值, 当调用了setState后,把本次操作放入队列中, 如果组件未在创建/更新,那么立即执行更新流程, 如果组件在刷新,那么本次更新操作放入稍后执行的队列中等待执行.

  • 批处理时会把待处理数组中每一个操作从第一个依次传递给后一个,直到待处理操作为空,把最后的结果设置给state

相关文章

  • React 的几个注意点

    受控组件和无状态组件 非受控组件推荐使用受控组件来实现表单. 在受控组件中, 表单数据是有React组件处理如果让...

  • React 的注意点

    1.jsx写HTML代码的时候,如果是html标签首字母必须是小写2.如果是组件,首字母必须大写3.class和f...

  • React中的注意点

    props是只读属性。 input组件中使用默认值,非受控组件组件中的constructor中使用this.val...

  • React注意点总结

    最初使用React时,没有太注意细节,只是会使用,实现功能,当使用一段时间再回过头来看官方文档时发现有些东西原来是...

  • React组件生命周期

    问题 理解React组件的生命周期 知识点 React流程状态图 注意:流程状态图为使用React.createC...

  • Taro开发注意点

    taro 开发注意点: 注意点原因 如果要支持 React Native 端,必须采用 Flex 布局,并且样式选...

  • 理财注意的几个点

    最近,看了一些金融的书。俗话说的好:你不理财,财不理你, 感觉有几个点 1越早学会理财越好 一般人都是想着我等有钱...

  • 记账的几个注意点

    记账这个话题其实很有意思。我大学就开始学会计,工作之后做了段码农然后一直是做ERP之类的会计软件。对企业会计也是有...

  • 跑步的几个注意点

    前脚掌着地,还是全脚掌,或脚后跟着地,哪个好,不伤膝盖? 跑步最关键的是控制心率,心率一定要在最大心率的80%以下...

  • 字体几个注意点

    需求 我们有时会遇到这样的需求,设计师会标注“我是标题”和“8”的之间的距离,如果我们按照设计师的去设置,发现偏差...

网友评论

      本文标题:React 的几个注意点

      本文链接:https://www.haomeiwen.com/subject/upeebftx.html