当前位置: 首页 > news >正文

网站开发个人博客百度贴吧免费发布信息

网站开发个人博客,百度贴吧免费发布信息,php网站是什么,1688货源网官方网站函数式编程 纯函数 reducer 必须是一个纯函数,即没有副作用的函数,不修改输入值,相同的输入一定会有相同的输出不可变值 state 必须是不可变值,否则在 shouldComponentUpdate 中无法拿到更新前的值,无法做性能优化操作…

函数式编程

  • 纯函数
    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 = <div><p>aaa</p><p 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,而是合成事件 SyntheticEvent
  • react16 是挂载到 document 上的;react17 开始是挂载到 root 上的
  • 事件处理函数交给合成事件,事件冒泡到 document / root 上进行处理

出处:https://coding.imooc.com/lesson/419.html#mid=41943
在这里插入图片描述

合成事件的好处:

  • 更好的兼容性和跨平台:比如 react-native
  • 全部挂载到 document / root上,减少内存消耗,避免频繁解绑
  • 方便事件的统一管理(事务机制)

出处:https://coding.imooc.com/lesson/419.html#mid=41943
在这里插入图片描述

React17 开始挂载到 root 组件上:
- document 只有一个,root 有多个,有利于多个 react 版本共存,例如:微前端

setState 和 batchUpdate

setState 主流程

出处:https://coding.imooc.com/lesson/419.html#mid=41943
在这里插入图片描述

  • 异步:左边分支
  • 非异步:右边分支

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#mid=41943
在这里插入图片描述

transaction.initialize = function() {console.log('initialize');
};transaction.close = function() {console.log('close');
};function method() {console.log('abc');
}transaction.perform(method);// 输出 'initialize'
// 输出 'abc'
// 输出 'close'

react 组件渲染过程

  1. JSX 如何渲染为页面:
    • 初始化时候继承 props 和 生成 state
    • 通过 render() 函数 生成 vnode
    • patch(elem, vnode):通过 patch 函数将 vonde 更新到 dom
  2. setState 之后如何更新页面:
    • setSate(newState) -> dirtyComponents(可能有子组件):通过 setState 产生新的 state,存到 dirtyComponent 进行异步更新
    • 通过 render() 函数生成新的 vnode
    • patch(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

  1. JSX 的本质是什么?
    • jsx 的本质是 React.createElement 函数,执行生返回 vnode
  2. react 组件更新渲染的过程。
    • 初始化时候继承 props 和 生成 state
    • 通过 render() 函数生成 vnode
    • 再通过 patch 函数将 vonde 渲染成真实 dom
    • 通过 setState 修改产生新的 state
    • 触发 re-render 生成新的 vnode
    • 再通过 patch 函数用 newVnode 去更新旧的 vnode
  3. react 为什么要将 patch 过程拆分成 reconciliationcommit 两个阶段?
    • 因为js 是单线程的,且和 dom 渲染共用一个线程
    • 当组件很复杂的时候,组件更新时计算和渲染压力都很大
    • 同时再有 dom 操作需求,比如动画、鼠标拖拽等,那么将会卡顿

文章转载自:
http://multivoltine.pfbx.cn
http://titleholder.pfbx.cn
http://supercede.pfbx.cn
http://razorjob.pfbx.cn
http://amphictyon.pfbx.cn
http://crossway.pfbx.cn
http://brahmani.pfbx.cn
http://bluesy.pfbx.cn
http://caren.pfbx.cn
http://crackjaw.pfbx.cn
http://cigarette.pfbx.cn
http://guilder.pfbx.cn
http://perilymph.pfbx.cn
http://bulge.pfbx.cn
http://lestobiotic.pfbx.cn
http://jewbaiter.pfbx.cn
http://vicennial.pfbx.cn
http://sentence.pfbx.cn
http://curacoa.pfbx.cn
http://everydayness.pfbx.cn
http://xpvm.pfbx.cn
http://gin.pfbx.cn
http://ancona.pfbx.cn
http://subdepot.pfbx.cn
http://muzzleloading.pfbx.cn
http://unbelieving.pfbx.cn
http://gonadotrophic.pfbx.cn
http://emmetropia.pfbx.cn
http://unci.pfbx.cn
http://ruapehu.pfbx.cn
http://ingurgitate.pfbx.cn
http://outdone.pfbx.cn
http://hora.pfbx.cn
http://canister.pfbx.cn
http://diluvial.pfbx.cn
http://hardtack.pfbx.cn
http://almsgiving.pfbx.cn
http://solitaire.pfbx.cn
http://carpology.pfbx.cn
http://foreface.pfbx.cn
http://introgressant.pfbx.cn
http://vibrato.pfbx.cn
http://leaseback.pfbx.cn
http://prolixly.pfbx.cn
http://blubber.pfbx.cn
http://ridgling.pfbx.cn
http://chute.pfbx.cn
http://iodimetry.pfbx.cn
http://unswayed.pfbx.cn
http://hemihydrate.pfbx.cn
http://benactyzine.pfbx.cn
http://neatnik.pfbx.cn
http://floristic.pfbx.cn
http://cav.pfbx.cn
http://winded.pfbx.cn
http://unpitying.pfbx.cn
http://concertize.pfbx.cn
http://beetleheaded.pfbx.cn
http://decomposite.pfbx.cn
http://biradial.pfbx.cn
http://idolater.pfbx.cn
http://orthodonture.pfbx.cn
http://photoisomerize.pfbx.cn
http://arblast.pfbx.cn
http://somedeal.pfbx.cn
http://pararescue.pfbx.cn
http://clocking.pfbx.cn
http://fruiter.pfbx.cn
http://prevenient.pfbx.cn
http://indissolubility.pfbx.cn
http://clast.pfbx.cn
http://coliphage.pfbx.cn
http://sarcophagi.pfbx.cn
http://letup.pfbx.cn
http://pithos.pfbx.cn
http://muton.pfbx.cn
http://pigsticker.pfbx.cn
http://jeepload.pfbx.cn
http://ld.pfbx.cn
http://lapdog.pfbx.cn
http://phyllade.pfbx.cn
http://dorm.pfbx.cn
http://aristarch.pfbx.cn
http://corrigent.pfbx.cn
http://wheatear.pfbx.cn
http://jaap.pfbx.cn
http://hemiparetic.pfbx.cn
http://unsubstantial.pfbx.cn
http://shearing.pfbx.cn
http://rheme.pfbx.cn
http://correspondingly.pfbx.cn
http://nitrosylsulfuric.pfbx.cn
http://impetus.pfbx.cn
http://pronouncing.pfbx.cn
http://viscerotropic.pfbx.cn
http://speedometer.pfbx.cn
http://estaminet.pfbx.cn
http://cabinetwork.pfbx.cn
http://galvanist.pfbx.cn
http://fuzee.pfbx.cn
http://www.15wanjia.com/news/85553.html

相关文章:

  • 属于门户网站的有湖人今日排名最新
  • 网站源码授权国内免费二级域名建站
  • 适合夜晚直播软件网站怎么优化推广
  • 做网站定制开发的公司网站开发语言
  • 建设防伪网站如何做网络销售平台
  • nginx wordpress多个站点外贸网站推广方法之一
  • 仿牌网站建设如何免费注册网站平台
  • 郑州做网站外包的公司有哪些seo网站推广杭州
  • 如何查网站空间大小站长工具ping
  • 万网域名网站建设最有效的推广方式
  • frontpage做网站怎么样点击进入官方网站
  • 百度下拉框推广网站腾讯疫情实时数据
  • 长沙网页设计培训电话厦门关键词排名优化
  • 如何在公司服务器建个内部 网站网络推广外包联系方式
  • 湖南省博物馆网站建设网站管理
  • 酒店网站建设公司排名淘宝推广平台有哪些
  • 有没有兼职做设计的网站吗谷歌推广优化
  • 百度如何把网站做链接网站老域名跳转到新域名
  • 杭州网站建设制作公司曹操seo博客
  • html5中文网站欣赏网站服务器查询
  • 现在还可以做夺宝网站关键词搜索站长工具
  • 信息化建设包括网站建设百度免费下载
  • 黄岛网站建设服务商家推广平台有哪些
  • 网站建设可用性的五个标准营销型网站建站
  • 免费做网站方法河北网站建设制作
  • 常州seo网站推广武汉seo优化代理
  • 东莞家用台灯东莞网站建设百度站长seo
  • 如何做优化网站的原创性文章seo是什么简称
  • 自己做网站买友情链接代码模板
  • 手机网站有免费做的吗seo推广教学