为什么将setState值设置为某个值后仍然为空?

时间:2020-10-14 13:12:25

标签: react-native

我正在用react-native-camera拍照并保存data.uri的状态。

第一次运行代码,状态值为空;在随后的捕获中,状态值具有先前的data.uri值。

其他setState调用的行为也类似(该值在首次运行后不会更改,但在随后的点击中确实会更改)。

我对React Native不太了解-可能是什么原因导致了这种行为?

[takPicture function, setting state to setImageUri(data.uri)1

state keeping uri

logged console, image capature (setState(data.uri) is empty.
But logging data.uri has a value

on another capture,
imageCapture takes the value of the previous captureed state,
difference can be seen when data.uri is logged along setImageState()

我在做什么不对?任何帮助。

2 个答案:

答案 0 :(得分:0)

调用setImageUri时,您正在计划对该组件状态的更新。但是,imageUri已分配给当前渲染时当前处于状态 的值,并且在下一次渲染组件之前不会反映新值。这就是为什么您第一次看到一个空字符串,并在随后的调用中看到“上一个”值的原因。

因此,看起来您本身并没有做任何“错误”的事情,只是误解了更新组件状态时发生的事情。

如果您希望看到此效果,可以尝试useEffect

useEffect(() => {
   console.log(`The current value of imageUri is: ${imageUri}`);
}, [imageUri]);

只要imageUri的值更改,该调用就会被调用。

答案 1 :(得分:0)

我认为您应该更加熟悉React中的状态。 https://reactjs.org/docs/state-and-lifecycle.html#using-state-correctly

设置值不是同步任务。