React-大纲


setState是不是异步

有时表现异步有时表现同步

合成事件和钩子函数中是异步,原生事件和setTimeout中是同步

合成事件? 原生事件?

如果DOM上绑定了过多的事件处理函数,整个页面响应以及内存占用可能都会受到影响。React为了避免这类DOM事件滥用,同时屏蔽底层不同浏览器之间的事件系统差异,实现了一个中间层——SyntheticEvent。

SyntheticEvent : 跨浏览器原生事件包装器

在事件回调被调用后,SyntheticEvent 对象将被重用并且所有属性都将被取消

React并不是将click事件绑在该div的真实DOM上,而是在document处监听所有支持的事件,当事件发生并冒泡至document处时,React将事件内容封装并交由真正的处理函数运行。

target 和 currentTarget 的区别 ?

浏览器事件过程: 捕获 - 目标 - 冒泡 ?

React中获取DOM节点

  • ReactDom.findDOMNode(component)(React组件的引用)
//引入
import ReactDOM from 'react-dom'
//使用
componentDidMount(){
    const dom = ReactDOM.findDOMNode(this);
    // this为当前组件的实例
}
render() {}
  • refs用于React组件内子组件的引用
// ref方法
<div ref={ref=> this.div = ref} />    //通过this.div获取

//refs方法
<div ref='div' />    //通过this.refs.div获取

//React.creatRef()
this.div = React.createRef() //constructor
<div ref={this.div} /> //render  通过this.div获取

组件/逻辑的复用

  • 高阶组件(不是特别清晰了)

    属性代理

    反向继承

组件将props转换成UI,高阶组件将组件转换成另一个组件

  • 渲染属性(Render Props)/ 容器组件
  • react-hooks

redux工作流程

  • Store
  • State
  • Action
  • Reducer
  • dispatch

react-redux

  • Provider
  • connect

redux 和 mobx的区别

两者对比:

  • redux将数据保存在单一的store中,mobx将数据保存在分散的多个store中
  • redux使用plain object保存数据,需要手动处理变化后的操作;mobx适用observable保存数据,数据变化后自动处理响应的操作
  • redux使用不可变状态,这意味着状态是只读的,不能直接去修改它,而是应该返回一个新的状态,同时使用纯函数;mobx中的状态是可变的,可以直接对其进行修改
  • mobx相对来说比较简单,在其中有很多的抽象,mobx更多的使用面向对象的编程思维;redux会比较复杂,因为其中的函数式编程思想掌握起来不是那么容易,同时需要借助一系列的中间件来处理异步和副作用
  • mobx中有更多的抽象和封装,调试会比较困难,同时结果也难以预测;而redux提供能够进行时间回溯的开发工具,同时其纯函数以及更少的抽象,让调试变得更加的容易

场景辨析:

基于以上区别,我们可以简单得分析一下两者的不同使用场景.

mobx更适合数据不复杂的应用: mobx难以调试,很多状态无法回溯,面对复杂度高的应用时,往往力不从心.

redux适合有回溯需求的应用: 比如一个画板应用、一个表格应用,很多时候需要撤销、重做等操作,由于redux不可变的特性,天然支持这些操作.

mobx适合短平快的项目: mobx上手简单,样板代码少,可以很大程度上提高开发效率.

当然mobx和redux也并不一定是非此即彼的关系,你也可以在项目中用redux作为全局状态管理,用mobx作为组件局部状态管理器来用.


文章作者: 木叶勇
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 木叶勇 !
 上一篇
React-教程练习 React-教程练习
React-教程练习需要实现的目标 react官方上的知识练习 mock的练习 react-router 练习 Eslint代码规范 Mobox redux 状态管理练习 2020/07/02 支持TS yarn add @types
2020-07-09
下一篇 
JavaScript-Promise JavaScript-Promise
Promisepromise.resove()–> 产生一个promise对象 resolve()、reject()并不停止Promise,可使用return resolve(...) 或 return reject(...) 建议不
2020-06-16
  目录