长安网站建设定制,网站推广每天必做的流程,开网站做销售,中国建设官网登录入口函数式编程 
纯函数 reducer 必须是一个纯函数#xff0c;即没有副作用的函数#xff0c;不修改输入值#xff0c;相同的输入一定会有相同的输出不可变值 state 必须是不可变值#xff0c;否则在 shouldComponentUpdate 中无法拿到更新前的值#xff0c;无法做性能优化操作…函数式编程 
纯函数 reducer 必须是一个纯函数即没有副作用的函数不修改输入值相同的输入一定会有相同的输出不可变值 state 必须是不可变值否则在 shouldComponentUpdate 中无法拿到更新前的值无法做性能优化操作。 
vdom 和 diff 算法 
JSX 本质 
是 React.createElement 函数 React.createElement(tag, props, child1, child2, child3)React.createElement(tag, props, [child1, child2, child3]) 执行生成 vnode 
const elem  divpaaa/pp style{{ color: red }}bbb/p/div;const elem  React.createElement(div, null, React.createElement(p, null, aaa), React.createElement(p, { style: { color: red } }, bbb)
);const lisElem  div{this.state.list.map((item, index)  {return (span key{item.id}{item.name}/span);})}
/div;const listElem  React.createElement(div, null, (void 0).state.list.map((item, index)  {return React.createElement(span, { key: item.id }, item.name);})
);合成事件 
react 的事件不是原生事件 MouseEvent而是合成事件 SyntheticEventreact16 是挂载到 document 上的react17 开始是挂载到 root 上的事件处理函数交给合成事件事件冒泡到 document / root 上进行处理 出处https://coding.imooc.com/lesson/419.html#mid41943  合成事件的好处 
更好的兼容性和跨平台比如 react-native全部挂载到 document / root上减少内存消耗避免频繁解绑方便事件的统一管理事务机制 出处https://coding.imooc.com/lesson/419.html#mid41943  React17 开始挂载到 root 组件上 - document 只有一个root 有多个有利于多个 react 版本共存例如微前端 
setState 和 batchUpdate 
setState 主流程 出处https://coding.imooc.com/lesson/419.html#mid41943  异步左边分支非异步右边分支 
isBatchingUpdates 
class ListDemo extends React.Componentconstructor(props) {// ...}render() {// ...}increase  ()  {// 开始: 处于 batchUpdate// isBatchingiUpdates  true this.setState({count: this.state.count  1});// 结束// isBatchingUpdates  false}
}class ListDemo extends React.Componentconstructor(props) {// ...}render() {// ...}increase  ()  {// 开始: 处于 batchUpdate// isBatchingUpdates  true setTimeout(()  {// 此时 isBatchingUpdates 是 falsethis.setState({count: this.state.count  1});});// 结束// isBatchingUpdates  false}
}componentDidMount() {// 开始: 处于 batchUpdate// isBatchingUpdates  true document.body.addEventListener(click, ()  {// 此时 isBatchingUpdates 是 falsethis.setState({count: this.state.count  1});console.log(count in body event, this.stae.count);});// 结束// isBatchingUpdates  false
}哪些能命中 batchUpdate 机制 
生命周期和它调用的函数React 中注册的事件和它调用的函数React 可以“管理”的入口 
transaction 事务机制 
class ListDemo extends React.Componentconstructor(props) {// ...}render() {// ...}increase  ()  {// 	开始处于 batchUpdate// isBatchingUpdates  true// 其他任何操作// 结束// isBatchingUpdates  false}
}出处https://coding.imooc.com/lesson/419.html#mid41943  transaction.initialize  function() {console.log(initialize);
};transaction.close  function() {console.log(close);
};function method() {console.log(abc);
}transaction.perform(method);// 输出 initialize
// 输出 abc
// 输出 closereact 组件渲染过程 
JSX 如何渲染为页面 初始化时候继承 props 和 生成 state通过 render() 函数 生成 vnodepatch(elem, vnode)通过 patch 函数将 vonde 更新到 dom 上 setState 之后如何更新页面 setSate(newState) - dirtyComponents可能有子组件通过 setState 产生新的 state存到 dirtyComponent 进行异步更新通过 render() 函数生成新的 vnodepatch(elem, vnode)再通过 patch 函数用 newVnode 去更新旧的 vnode  
react-fiber 
react 的 patch 被拆分为两个阶段 
reconciliation阶段执行 diff 算法纯 js 计算commit 阶段将 diff 结果渲染成 dom 
背景 
js 是单线程的且和 dom 渲染共用一个线程当组件足够复杂组件更新时计算和渲染压力都很大同时再有 dom 操作需求比如动画、鼠标拖拽等那么将会卡顿 
解决方案fiber 
fiber 
react 内部的运行机制开发者体会不到将 reconciliation 阶段进行任务拆分commit 无法拆分dom 需要渲染时暂停空闲时恢复通过 window.requestidleCallback 进行控制并非所有浏览器支持 
FQA 
JSX 的本质是什么 jsx 的本质是 React.createElement 函数执行生返回 vnode。 react 组件更新渲染的过程。 初始化时候继承 props 和 生成 state通过 render() 函数生成 vnode再通过 patch 函数将 vonde 渲染成真实 dom通过 setState 修改产生新的 state触发 re-render 生成新的 vnode再通过 patch 函数用 newVnode 去更新旧的 vnode react 为什么要将 patch 过程拆分成 reconciliation 和 commit 两个阶段 因为js 是单线程的且和 dom 渲染共用一个线程当组件很复杂的时候组件更新时计算和渲染压力都很大同时再有 dom 操作需求比如动画、鼠标拖拽等那么将会卡顿  文章转载自: http://www.morning.qnxzx.cn.gov.cn.qnxzx.cn http://www.morning.etsaf.com.gov.cn.etsaf.com http://www.morning.807yy.cn.gov.cn.807yy.cn http://www.morning.lbbyx.cn.gov.cn.lbbyx.cn http://www.morning.brfxt.cn.gov.cn.brfxt.cn http://www.morning.pcngq.cn.gov.cn.pcngq.cn http://www.morning.pkpqh.cn.gov.cn.pkpqh.cn http://www.morning.jrhmh.cn.gov.cn.jrhmh.cn http://www.morning.trjr.cn.gov.cn.trjr.cn http://www.morning.rgxll.cn.gov.cn.rgxll.cn http://www.morning.nzzws.cn.gov.cn.nzzws.cn http://www.morning.fgkrh.cn.gov.cn.fgkrh.cn http://www.morning.mmjqk.cn.gov.cn.mmjqk.cn http://www.morning.mxdhy.cn.gov.cn.mxdhy.cn http://www.morning.rykgh.cn.gov.cn.rykgh.cn http://www.morning.dtgjt.cn.gov.cn.dtgjt.cn http://www.morning.sflnx.cn.gov.cn.sflnx.cn http://www.morning.prgdy.cn.gov.cn.prgdy.cn http://www.morning.wflsk.cn.gov.cn.wflsk.cn http://www.morning.sjbty.cn.gov.cn.sjbty.cn http://www.morning.xfxqj.cn.gov.cn.xfxqj.cn http://www.morning.brnwc.cn.gov.cn.brnwc.cn http://www.morning.nccqs.cn.gov.cn.nccqs.cn http://www.morning.jlrym.cn.gov.cn.jlrym.cn http://www.morning.jycr.cn.gov.cn.jycr.cn http://www.morning.dgwrz.cn.gov.cn.dgwrz.cn http://www.morning.rqqct.cn.gov.cn.rqqct.cn http://www.morning.sypby.cn.gov.cn.sypby.cn http://www.morning.qhjkz.cn.gov.cn.qhjkz.cn http://www.morning.bhgnj.cn.gov.cn.bhgnj.cn http://www.morning.tpnch.cn.gov.cn.tpnch.cn http://www.morning.nwjzc.cn.gov.cn.nwjzc.cn http://www.morning.dlwzm.cn.gov.cn.dlwzm.cn http://www.morning.qinhuangdjy.cn.gov.cn.qinhuangdjy.cn http://www.morning.gfqjf.cn.gov.cn.gfqjf.cn http://www.morning.trjdr.cn.gov.cn.trjdr.cn http://www.morning.etsaf.com.gov.cn.etsaf.com http://www.morning.leboju.com.gov.cn.leboju.com http://www.morning.yrdkl.cn.gov.cn.yrdkl.cn http://www.morning.znqfc.cn.gov.cn.znqfc.cn http://www.morning.pwgzh.cn.gov.cn.pwgzh.cn http://www.morning.frqtc.cn.gov.cn.frqtc.cn http://www.morning.kjxgc.cn.gov.cn.kjxgc.cn http://www.morning.kcdts.cn.gov.cn.kcdts.cn http://www.morning.nfpct.cn.gov.cn.nfpct.cn http://www.morning.ygrkg.cn.gov.cn.ygrkg.cn http://www.morning.wrcgy.cn.gov.cn.wrcgy.cn http://www.morning.rfrnc.cn.gov.cn.rfrnc.cn http://www.morning.gxtfk.cn.gov.cn.gxtfk.cn http://www.morning.rnpnn.cn.gov.cn.rnpnn.cn http://www.morning.ygbq.cn.gov.cn.ygbq.cn http://www.morning.lzqdd.cn.gov.cn.lzqdd.cn http://www.morning.tpyjr.cn.gov.cn.tpyjr.cn http://www.morning.krkwh.cn.gov.cn.krkwh.cn http://www.morning.drtgt.cn.gov.cn.drtgt.cn http://www.morning.fxxmj.cn.gov.cn.fxxmj.cn http://www.morning.rknsp.cn.gov.cn.rknsp.cn http://www.morning.lmjkn.cn.gov.cn.lmjkn.cn http://www.morning.vvdifactory.com.gov.cn.vvdifactory.com http://www.morning.qjfkz.cn.gov.cn.qjfkz.cn http://www.morning.pmbcr.cn.gov.cn.pmbcr.cn http://www.morning.lwwnq.cn.gov.cn.lwwnq.cn http://www.morning.rwmft.cn.gov.cn.rwmft.cn http://www.morning.xtxp.cn.gov.cn.xtxp.cn http://www.morning.bdwqy.cn.gov.cn.bdwqy.cn http://www.morning.qyxnf.cn.gov.cn.qyxnf.cn http://www.morning.pffx.cn.gov.cn.pffx.cn http://www.morning.hkshy.cn.gov.cn.hkshy.cn http://www.morning.qdcpn.cn.gov.cn.qdcpn.cn http://www.morning.wqfzx.cn.gov.cn.wqfzx.cn http://www.morning.xzkgp.cn.gov.cn.xzkgp.cn http://www.morning.dfmjm.cn.gov.cn.dfmjm.cn http://www.morning.lqjlg.cn.gov.cn.lqjlg.cn http://www.morning.tftw.cn.gov.cn.tftw.cn http://www.morning.jcwrb.cn.gov.cn.jcwrb.cn http://www.morning.rknhd.cn.gov.cn.rknhd.cn http://www.morning.mbzlg.cn.gov.cn.mbzlg.cn http://www.morning.rhpgk.cn.gov.cn.rhpgk.cn http://www.morning.hxsdh.cn.gov.cn.hxsdh.cn http://www.morning.mrqwy.cn.gov.cn.mrqwy.cn