代码之家  ›  专栏  ›  技术社区  ›  intentionally-left-nil

useState是同步的吗?[复制]

  •  0
  • intentionally-left-nil  · 技术社区  · 6 年前

    过去,我们被明确警告 setState({myProperty}) 是异步的,并且 this.state.myProperty 在回调或下一个回调之前无效 render() 方法。

    对于useState,如何在显式更新后获取状态值?

    用钩子是怎么工作的?据我所知,setter函数 useState 不需要回拨,例如。

    const [value, setValue] = useState(0);
    setValue(42, () => console.log('hi callback');
    

    我在旧世界的另一个解决方法是挂起一个实例变量 (e.g. this.otherProperty = 42) this 严格模式)。

    2 回复  |  直到 6 年前
        1
  •  59
  •   Claire Lin    6 年前

    你可以用 useEffect 更新后访问最新状态。如果有多个状态钩子,并且只想跟踪其中一部分的更新,则可以将状态作为 使用效果 功能:

    useEffect(() => { console.log(state1, state2)}, [state1])
    

    以上 使用效果 只有在 state1 state2 此函数内部的值,因为它可能不是最新的。

    如果您想知道 useState this answer 提供一些深入了解。

        2
  •  4
  •   benas    6 年前

    好吧,如果你提到 docs 你会发现。。。

    const [state, setState] = useState(initialState);
    

    返回一个有状态值和一个更新它的函数。

    在初始呈现期间,返回的状态(state)与作为第一个参数(initialState)传递的值相同。

    setState(newState);
    

    在随后的重新呈现期间,useState返回的第一个值将始终是应用更新后的最新状态。

    所以你的新状态,不管是什么,都是你刚刚设定的 useState ,即 initialState state ,之后会进行反应性更新。进一步引用 docs

    componentDidUpdate . (docs)