react的usestate如何变成同步的?

usestate 里面的 set 方法是异步的,但是我想把他变成同步的,该怎么做??

const [fields, setfields] = useState([0]);

function change() {
    setfields([22, 1])
    console.log(fields) // 我想这里直接获得 [22,1]
}

就是一个异步和同步的问题,怎么解决呢?

阅读 27.3k
5 个回答
useEffect(() => {console.log(fields)}, [fields]);

试试

change => setfields => fields改变 => 组件从新render

是这样一个流程。

你想获得渲染后新的fields的值,你需要在useEffect中获取到。

react的setState是不能变成同步的, 不论是在函数组件或是class组件

setState({
    name: 'Ruofee'
}, () => {
    // setState回调函数
});

此处只是set state之后的一个回调, 实际上是等组件重新render再执行, 因此还是异步的
若是想监听useState某个值, 可以使用副作用钩子:

useEffect(() => {
    // 监听name变化
}, [name]);

需要知道的是, 初始化时useEffect总会调用一次

新手上路,请多包涵
const syncProps = useRef(props)
useEffect(() => {
    syncProps.current = props
})

用ref去存只要Props一变就同步过去

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Microsoft
子站问答
访问
宣传栏