usestate
里面的 set
方法是异步的,但是我想把他变成同步的,该怎么做??
const [fields, setfields] = useState([0]);
function change() {
setfields([22, 1])
console.log(fields) // 我想这里直接获得 [22,1]
}
就是一个异步和同步的问题,怎么解决呢?
usestate
里面的 set
方法是异步的,但是我想把他变成同步的,该怎么做??
const [fields, setfields] = useState([0]);
function change() {
setfields([22, 1])
console.log(fields) // 我想这里直接获得 [22,1]
}
就是一个异步和同步的问题,怎么解决呢?
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一变就同步过去
8 回答5.8k 阅读✓ 已解决
9 回答9.2k 阅读
6 回答4.7k 阅读✓ 已解决
5 回答3.5k 阅读✓ 已解决
4 回答7.9k 阅读✓ 已解决
7 回答9.8k 阅读
5 回答7.1k 阅读✓ 已解决
试试