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

网站后期维护需要怎么做建设网站实训收获

网站后期维护需要怎么做,建设网站实训收获,贵州省建设学校网站首页,网站图片360度旋转怎么做的setState 是 react 中更新 UI 的唯一方法,其内部实现原理如下: 调用 setState 函数时,React 将传入的参数对象加入到组件的更新队列中。React 会调度一次更新(reconciliation),在调度过程中,Re…

setState 是 react 中更新 UI 的唯一方法,其内部实现原理如下:

  1. 调用 setState 函数时,React 将传入的参数对象加入到组件的更新队列中。
  2. React 会调度一次更新(reconciliation),在调度过程中,React 会根据组件的 state 和 props 来计算出组件的新的状态,并比较新旧的状态,决定是否需要重新渲染组件。

this.setState([particalState], [callback])

  • particalState 是一个对象,支持部分修改 state,只更新当前要修改的属性,其余的保持不变。
  • callback 是可选的函数,在 setState 更新完成之后执行。类似于 vue 中的 nextTick 机制。
    • 发生在 componetDidUpdate 生命周期之后,DOM 更新完成之后。
    • componetDidUpdate 会在任何 state 更新之后调用,不管是否是 setState 引起的。
    • 这里的回调函数,只会在特定的 state 变化后出发,还要主动调用。
    • 即使我们使用了 shouldComponentUpdate返回 false 来组织组件更新, componentDidUpdate 不更新了,回调函数依然会执行。
import { Component } from "react";class ClassComp extends Component {state = {x: 10,y: 20,z: 0,};handleAdd = () => {// this是指向当前组件的实例,箭头函数式没有自己的thisthis.setState({x: this.state.x + 1,},() => {console.log(this.state.x, "xxxxxxxxxxxxx");});};shouldComponentUpdate() {return false;}componentDidUpdate() {console.log("componentDidUpdate class component");}render() {console.log("render class component");const { x, y, z } = this.state;return (<div>Class Component<p>x: {x}, y: {y} z:{z}<br /><button onClick={this.handleAdd}>add</button></p></div>);}
}
export default ClassComp;

在这里插入图片描述

setState 的同步与异步

  • r18 中,setState 在任何地方都是异步的,包括合成事件,周期函数,定时器。。。

    • r18 中有一套更新队列的机制,[updater]来处理的
    • 基于异步操作实现状态的批处理
  • 好处:

    • 异步的目的是为了性能优化,在多个 setState 调用时,可以合并成一个 state 更新

    • 异步的目的是为了防止 setState 调用过于频繁,造成性能问题

      在这里插入图片描述
      在这里插入图片描述
      在这里插入图片描述

  • 在 r18 之前。我们只在 react 的合成事件和生命周期函数中调用 setState 做批量更新,默认情况下,不会对原生事件,promise,setTimeout,requestAnimationFrame 等异步操作做批量更新。

r16 中的执行效果
在这里插入图片描述

r18 中的执行效果
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

需求

点击一个按钮,让数字 x 加一,结果为 30

import { Component } from "react";
class ClassComp extends Component {state = {x: 10,y: 20,z: 0,};handleAdd = () => {for (let i = 0; i < 20; i++) {this.setState(x:this.state.x+1);}console.log(this.state.x);};render() {console.log("render class component");const { x, y, z } = this.state;return (<div>Class Component<p>x: {x}, y: {y} z:{z}<br /><button onClick={this.handleAdd}>add</button></p></div>);}
}
export default ClassComp;

可以发现,打印结果为 1, 不是 30,改造代码,引入 flushSync
写法 1:

import { Component } from "react";
import { flushSync } from "react-dom";handleAdd = () => {for (let i = 0; i < 20; i++) {flushSync(() => {this.setState(x:this.state.x+1);}}console.log(this.state.x);};export default ClassComp;

写法 2:

import { Component } from "react";
import { flushSync } from "react-dom";handleAdd = () => {for (let i = 0; i < 20; i++) {this.setState(x:this.state.x+1);flushSync()}console.log(this.state.x);};export default ClassComp;

可以看到 render 执行了 20 次,但是打印结果为 30,如果只让 render 执行一次,打印结果为 30,需要改造代码

import { Component } from "react";
class ClassComp extends Component {state = {x: 10,y: 20,z: 0,};handleAdd = () => {for (let i = 0; i < 20; i++) {this.setState((prev) => {return { x: prev.x + 1 };});}console.log(this.state.x);};render() {console.log("render class component");const { x, y, z } = this.state;return (<div>Class Component<p>x: {x}, y: {y} z:{z}<br /><button onClick={this.handleAdd}>add</button></p></div>);}
}
export default ClassComp;

在这里插入图片描述

http://www.15wanjia.com/news/165829.html

相关文章:

  • 网站留言功能最便宜的车
  • 网站开发外包售后维护合同APP和网站是一样吗
  • 长春电商网站建设公司建站技术论坛
  • 打代码做网站的软件北京网站定制流程
  • 网站建设属于什么经济科目跨境电商app开发
  • 北京中邦亚通网站android代码打开wordpress
  • 怎么给公司做微网站长春专业企业网站建设工作室
  • 设计网站的制作框架深圳网站优化多少钱
  • 新建的网站必须要备案吗人们做网站怎么赚钱
  • 网站开发公司如何运营html5手机端开发
  • 为女朋友做网站网上购物软件排行榜
  • 物流网站有哪些增城企业网站建设
  • 网站广告的图片怎么做国家企业信用信息查询系统官网
  • 东莞网站建设(曼哈顿信科)国际室内设计公司排名
  • 成都高端网站建设哪家好做进化树的在线网站
  • 南坪网站建设哪里好推广网站的方法
  • 给女友惊喜做网站物业管理系统c语言
  • 网站开发公司比较有名网络营销是什么专业学的
  • 做设计那个素材网站最好邯郸网站设计 贝壳下拉
  • nas 做网站电商网站取名
  • 全国二级建造师注册信息查询网站知名网站
  • wordpress 查看版本seo优化网络公司
  • 郑州网站建设小程序西安招标信息网官网
  • 三亚凤凰镇网站建设兼职招聘网东莞公司注册要多少钱
  • 网站建设 西安世界局势最新消息军事
  • 网站建设先进材料wordpress文章新窗口
  • 网站开发平台及常用开发工具天天seo站长工具
  • 中诺建设集团网站国内十大旅游网站排名
  • 上海网站开发制网站建设背景资料
  • 公司做网站都咨询哪些问题沈阳建信建设工程有限公司位置