useState和setState的区别
共性
useState和setState都是用来改变变量然后让界面同步渲染的方法,他们都是异步操作,不能直接获取state的值。
区别
参数:
setState(参数1, 参数2); // 参数1表示要更改的数据,参数2是回调函数,可以拿到最新的数据
useState(参数); // useState只有一个参数,表示初始值
合并:
setState会自动浅合并,useState不会。
this.setState({name: 'sifan'}) => this.setState({...this.state})
回调:
setState可以在它的第二个参数中拿到最新的state,useState只有配合useEffect的使用
state什么时候是同步,什么时候是异步
如果在react能控制的时候就是异步,例如componentDidmount等
如果在js能控制得时候就是同步,例如原生元素绑定事件,setTimeout等
行百里者半九十