美文网首页
04-react-state和setState

04-react-state和setState

作者: 低头看云 | 来源:发表于2020-10-16 11:13 被阅读0次

react-state和setState

state

class Counter extends React.Component {
    constructor(props) {
        super(props);
        this.state = { count: 1 };
    }
    // ...
}

setState

setState(updater[, callback])
  • updater 可以是一个函数也可以是一个对象类型
this.setState((state, props) => stateChange);
this.setState({ count: 1 });

setState 的基本使用

  • setState 的基本格式
this.setState({ count: this.state.count + 1 });
  • setState 是批量更新的
class Test extends React.Component {
    state = {
        count: 1
    };
    componentDidMount() {
        this.setState({
            count: this.state.count + 1
        });
        this.setState({
            count: this.state.count + 1
        });
        // 批量合并更新 count为2
    }
    render() {
        return <div>{this.state.count}</div>;
    }
}
  • this.state 和 this.props 可能会异步更新
    • 可以让 setState()接受一个函数
    • 第一个参数为 state,第二个参数为 props
class Test extends React.Component{
    state = {
        count : 1
    }
    componentDidMount(){
        this.setState((state, props) => {
            console.log("state,props :", state, props);
            return { count: state.count + 1 };
        });
        this.setState((state, props) => ({
            count: state.count + 1
        })
        this.setState((state, props) => ({
            count: state.count + 1
        })
        // count 值为4

    }
    render(){
        return (
            <div>{this.state.count}</div>
        )
    }
}
  • setState 并不总是立即更新组件,它会批量推迟更新
  • 所以调用后立即读取 this.state 成为隐患,可以是使用 componentDidUpdate 或者是 setState 的回调函数
this.setState(
    {
        count: 2
    },
    () => {
        console.log("this.setState的回调函数");
    }
);

setState 小结

1.setState 只在合成事件和钩子函数中是异步的,在原生事件setTimeout 中是同步的
2.setState 的异步并不是说内部异步代码是实现的,其本身的代码是同步的.

  • 合成事件和钩子函数的调用在 setState 调用之前, 导致在合成事件和钩子函数中没法拿到 setState 更新后的值,形成了所谓的"异步",当然可以通过的第二个参数 setState(partialState,callback)中的 callback 拿到更新后的结果

总结:属于原生 js 执行的空间,setState 就是同步,被 react 处理过的就是异步

3.setState 的批量更新中,

  • 在原生 js 事件和 setTimeout 中,不会批量更新
  • 在 react 中
    - 如果对同一个值进行多次 setState,setState 的批量更新会对其进行覆盖,取最后一次的执行,
    - 如果是对不同的值,在更新时会其进行合并批量更新

相关文章

  • 04-react-state和setState

    react-state和setState state setState updater 可以是一个函数也可以是一个...

  • React初探(二)

    探索state和setState 关于state和setState有以下几点注意: 1.调用setState方法来...

  • react拓展

    setState() setState更新状态的2种方式 对象式的setState 函数式的setState 对象...

  • setState

    React文档对于setState的解释和应用setState()会对组件状态的改变进行排列然后噶欧式React该...

  • setState的同步和异步和betterScroll 使用

    1. setState的异步和同步使用 setState 处于同步的逻辑中, 异步更新状态,更新真实DOMsetS...

  • setState()状态更新函数

    理解setState的关键 setState不会立刻改变React组件中state的值; setState通过引发...

  • 08react基础-react原理

    setState()更新数据 setState()更新数据是异步的 注意:使用该语法,后面的setState不要依...

  • 『react』setState()特性

    一.setState()更新数据 由于setState()更新数据是异步的,所以后面的setState()不要依赖...

  • setState相关

    - setState相关 setState是同步执行的,但是state不一定同步更新 多次执行setState,...

  • react 中的 API

    设置状态:setState setState(object nextState[,function callbac...

网友评论

      本文标题:04-react-state和setState

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