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>
    );
  }
}

 

posted @ 2018-11-22 17:56  DHeng  阅读(1877)  评论(0编辑  收藏  举报