JavaScript引擎和页面渲染引擎两个线程是互斥的,当其中一个线程执行时,另一个线程只能挂起等待,如果JavaScript线程长时间占用了主线程,那么渲染层面的更新就不得不长时间等待,界面长时间不更新,会导致页面响应度变差,用户可能会感觉到卡顿
工作原理:React Fiber的原理其实很简单---分片,把一个耗时长的任务分成很多小片,每一个小片的运行时间很短,虽然总时间依然很长,但是在每个小片执行完之后,都给其他的任务一个执行的机会,这样唯一的线程就不会被独占,其他任务依然有运行的机会
1.函数式定义的无状态组件
2.es6形式的class组件
3.es5原生方式React.creatClass定义的组件
React定义的一种类似XML的JavaScript语法扩展,他的典型特征是标签和js混着写
它的优点有:
1.父组件向子组件通信,父组件在子组件身上通过自定义属性向子组件传值,子组件通过props接收值
2.子组件向父组件通信,父组件在子组件身上通过自定义属性将一个函数传递给子组件,子组件回调该函数并传值
3.非起嵌套组件间通信,实例化一个events对象,其中一个组件监听事件,另一个组件触发事件并传值
4.跨级组件之间通信,借助Context,外层组件用Provider传值给内层组件,内层组件用context接收值
constructor
getDefaultProps
getInitialState
componentWillMount
componentDidMount,在这里发起网络请求,创建定时器,添加事件监听
componentWillReceiveProps
shouldComponentUpdate,用于组件性能优化
componentWillUpdate
render,组件更新的核心方法
componentWillUpdate
componentWillUnMount,在这里取消网络请求,销毁定时器,移除事件监听
方式1:通过ref获取到子组件实例,通过子组件实例调用子组件的方法
方式2:通过属性传递函数到子组件,子组件回调该函数将子组件的实例以参数的形式传给父组件并保存在父组件中,父组件拿到子组件的实例调用子组件的方法
高阶函数:本质是一个函数,它的参数是函数 或返回值是一个函数
应用:函数柯里化,函数节流,函数防抖,分时函数,AOP(面向切面编程)
高阶组件:本质是一个函数,它的参数是组件,返回值是一个组件
高阶组件最大的特点就是重用组件逻辑。它并不是由React API定义出来的功能,而是由React的组合特性衍生出来的一种设计模式,例如:react-router-dom中的withRouter,react-redux中的connect就是高阶组件
Link和NavLink默认渲染为a标签
component,支持react元素和回调函数两种写法
render,只支持回调函数的写法
children,只支持回调函数的写法
集中管理应用程序的状态
react组件间通信
1.调用store.dispatch(action)
2.store调用reducer函数
3.根reducer把多个子reducer输出合并成一个单一的state树
4.store保存根reducer返回的完整state树
1.单一数据源,整个应用的state被存储在唯一一个store中
2.State是只读的,唯一改变state的方法就是触发action
3.使用纯函数来修改state,为了描述action如何改变state,你需要编写reducer
1.react-redux将redux的dispath和state映射到react组件的props中,将react组件与redux真正连接起来,实现组件间的通信
2.降低了react组件和redux仓库的耦合性
3.当store中的数据改变时,使用到该数据的多个组件会立即更新,确保组件状态的统一
redux-logger
redux-thunk
redux-saga
redux-promise
({ getState,dispatch }) =>next ==>action
1.函数式组件一般用于比较简单的组件定义,类组件用于复杂的组件定义
2.函数组件是一个纯函数,它接收一个props对象返回一个react元素;而类组件需要去继承React.Component并且创建render函数返回react元素
3.函数组件中的this是undefined,类组件中的this指向的是当前组件的实例对象
4.函数组件没有生命周期和状态state,而类组件有
5.函数组件ReactDOM.render的过程:随后调用该函数,将赶回的虚拟DOM转为真实DOM,随后呈现在页面中,类组件中ReactDOM.render的过程:new出该组件的实例,并通过该实例调用原型上的render方法,将render返回的虚拟DOM转为真实的DOM,随意偶呈现在页面中
useState,给函数式组件引入状态
useEffect,给函数式组件引入生命周期
useContext,实现多层嵌套组件传值
useReducer,实现类似redux的状态管理,可以看作是mini版的redux
useMemo,用于性能优化,会执行第一个函数并将执行结果返回,该结果会被缓存
useCallback,用于性能优化,不会执行第一个参数参数,而是将它返回
useRef,类似createDef,用来生成DOM对象
columns,表格列
cataSource,表格数据源
pagination,表格分页
loading,表格loading状态