• React中的setState到底发生了什么?


    https://yq.aliyun.com/ziliao/301671

    https://segmentfault.com/a/1190000014498196

    https://blog.csdn.net/u011272795/article/details/80882567

    import React, { Component } from 'react';
    
    export default class SeeState extends Component {
      constructor() {
        super();
          this.state = { val: 0 };
      }
      componentDidMount() {
        // 在同一个方法中多次setState是会被合并的,并且对相同属性的设置只保留最后一次的设置;
        // 定时器中的setState,每次都会引起新的render,即使是同一个定时器中的多次setState
        // render输出3
          this.setState({val: this.state.val + 1});
          console.log(this.state.val); // 第 1 次 log 0
          this.setState({val: this.state.val + 1});
          console.log(this.state.val); // 第 2 次 log 0
          setTimeout(() => {
              this.setState({val: this.state.val + 1});
              console.log(this.state.val); // 第 3 次 log 2
              this.setState({val: this.state.val + 1});
              console.log(this.state.val); // 第 4 次 log 3
          }, 0);
    
        // setState不会立刻改变React组件中state的值;而是存一个快照
        // render输出2
        // this.setState(prevState=>({
        //   val: prevState.val+1
        // }))
        // console.log(this.state.val); // 第 1 次 log 0
        // this.setState(prevState=>({
        //   val: prevState.val+1
        // }))
        // console.log(this.state.val); // 第 2 次 log 0
      }
      render() {
        const {val} = this.state
        return (
          <div>{val}</div>
        );
      }
    }
  • 相关阅读:
    IaaS、PaaS、SaaS的简单介绍
    抓包工具F12和Fiddler的使用
    Element的el-cascader组件获取级联选中的label值
    解决C盘爆满的方法
    js-简单的加密解密函数
    使用removeBg去除图片背景
    git手动提交命令
    JS-下拉筛选的实现
    mysql根据json字段内容作为查询条件
    获取访问用户的客户端IP(适用于公网与局域网)
  • 原文地址:https://www.cnblogs.com/llcdxh/p/10002579.html
Copyright © 2020-2023  润新知