zoukankan      html  css  js  c++  java
  • react中this.setState的理解

    this.setState作用?

    react中要修改this.state要使用this.setState,因为this.state只是一个对象,单纯的修改state并不会触发ui更新.

    this.setState在修改state的同时,会调用render函数从而触发组件的更新

    (实际上this.setState修改完数据后,在调用的生命周期顺序为:shouldComponentUpdate->componentWillUpdate->

    render->componentDidUpdate)

    this.setState写法?

    this.setState有两个参数,写法如下:

    或者this.setState(()=>{return {msg:’xxx’}},()=>{});

    或者this.setState(()=>({msg:’xxx’}),()=>{});

    第一个参数是异步执行,第二个参数是异步执行完后执行.

    第二个参数的作用是获取最新的数据和最新的dom,可以用来验证数据是否修改成功等同于componentDidMount

    this.setState都是异步的吗?

    由React控制的事件处理程序,以及生命周期函数调用setState不会同步更新state 。

    React控制之外的事件中调用setState是同步更新的。比如原生js绑定的事件,setTimeout/setInterval等。

    大部分开发中用到的都是React封装的事件,比如onChange、onClick、onTouchMove等,这些事件处理程序中的setState都是异步处理的

     

    为什么是异步的?

    setState异步是因为在state更新量大的时候,可以批量更新state,在一段时间内等待一部分数据更新完,在更新

    this.setState为什么在原声中是同步的?

    因为react自己封装了一套机制代理原生事件,这就是合成事件,比如onClick,在合成事件中有原生事件没有的功能,这些多出来的导致setState执行是异步的.而在原生事件也就是非合成事件中是同步的

    setState执行后触发了那些函数

    我们知道setState执行后会触发render渲染,但并不只是render这一个生命周期,具体是:

    setState->shouldComponentUpdate->componentWillUpdate->render->componentDidUpdate

  • 相关阅读:
    linux-Windows文件上传Linux
    linux-ifconfig 查看没有IP
    springBoot 发布war/jar包到tomcat(idea)
    linux-常用命令
    (转)JVM各种内存溢出是否产生dump
    数据库缓存的几种方式
    使用jprofiler分析dump文件一个实例
    Hibernate之一级缓存和二级缓存
    最佳实践 缓存穿透,瞬间并发,缓存雪崩的解决方法
    缓存与数据库一致性之三:缓存穿透、缓存雪崩、key重建方案
  • 原文地址:https://www.cnblogs.com/liuXiaoDi/p/12593717.html
Copyright © 2011-2022 走看看