React中的setState到底發生了什麼?

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

https://segmentfault.com/a/1190000014498196segmentfault

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

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>
    );
  }
}
相關文章
相關標籤/搜索