react hook,useState如何实现setState({}, ()=>{})这种先赋值再执行回调的方法?

我现在需要先赋值,再执行方法,类似原来的setState({}, ()=>{}),请问正规的写法是什么?

阅读 7.6k
2 个回答

其实不太明白这种情况使用场景
你既然都知道要set的值是什么了 为什么还要等他赋值完成再进行后续操作呢

const handleClick = () => {
    fetch('something').then(data => {
        setSomething(data.something)
        
    })
}

useEffect(() => {
    console.log(">>>", something)
}, [something])

这是最简单直接的。

逻辑上this.setState的第二个参数,可能是因为这种情况

// 
someFunc() {
    // 需要用到this.state.name
}

handleChange() {
    this.setState({name: 'rose'})
    this.someFunc()
}

someFunc可能无法使用到正确的name,才需要转换成setState的callback中调用。那从逻辑上说someFunc是依赖name的正确值执行争取的逻辑,那么someFunc应该耦合name的值,而不是this.state.name。所以还可以从设计上让someFunc接受一个参数:

// 
someFunc(name) {
    // 依赖传进来的name执行逻辑
    // 实在不行还可以兜底
    name = name === undefined ? this.state.name : name
}

handleChange() {
    let name= 'rose'
    this.setState({name})
    this.someFunc(name)
}
推荐问题