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