美文网首页
正确使用setState

正确使用setState

作者: 湾湾_moon | 来源:发表于2020-08-28 14:52 被阅读0次

    1、参数

    setState(partialState,callback)
    
    partialState:object|function
    

    用于产生与当前state合并的子集

    callback
    

    state更新后立即执行的回调函数

    2、setState更新(异步更新、同步更新)

    在合成事件中异步更新

    import React, { Component } from 'react'
    
    export default class test extends Component {
        constructor(props) {
            super(props)
            this.state = {
                num: 0
            }
        }
        changeNumInner = () => {
            this.setState({
                num: this.state.num + 1
            })
            console.log('this.state.num', this.state.num)
        }
        changeNum = () => {
            this.changeNumInner()
        }
    
        render() {
            const { num } = this.state
            return (
                <div>
                    <button onClick={this.changeNum}>{num}</button>
                </div>
            )
        }
    }
    

    在setTimeout中同步更新

    changeNum = () => {
        setTimeout(() => {
            this.changeNumInner()
        }, 0)
    }
    

    在原生事件中同步更新

    componentDidMount() {
        const ele = document.getElementById('xx')
        ele.addEventListener('click', this.changeNumInner, false)
    }
    

    利用setState第二个callback参数同步更新

    changeNumInner = () => {
        this.setState({
            num: this.state.num + 1
        }, () => {
            console.log('立即拿到state最新值', this.state.num)
        })  
    }
    

    利用setState第二个callback参数同步更新

    changeNumInner = () => {
        this.setState({
            num: this.state.num + 1
        }, () => {
            console.log('立即拿到state最新值', this.state.num)
        })  
    }
    

    State 的更新会被合并

    changeNumInner = () => {
        this.setState({ num: this.state.num + 1 })
    }
    
    changeNum = () => {
        this.changeNumInner()
        this.changeNumInner()
    }
    

    实现State的链式调用

    changeNumInner = () => {
        this.setState((prevState) => ({
            num: prevState.num + 1
        }))
    }
    

    相关文章

      网友评论

          本文标题:正确使用setState

          本文链接:https://www.haomeiwen.com/subject/apaksktx.html