react-native - useFocusEffect 不更新 setstate
问题描述
我有这个 useFocusEffect 功能:
useFocusEffect(
useCallback(() => {
async function setFilterValue() {
let filterValue = await AsyncStorage.getItem('filterValue');
let inputValue = JSON.parse(filterValue);
if (gpsFilterValue === null) {
setGpsFilterValue(inputValue);
console.log('null')
// setRefreshing(true)
} else if (inputValue !== parseInt(gpsFilterValue)) {
setGpsFilterValue(inputValue);
console.log('refreshing1')
setTimeout(() => {
console.log(gpsFilterValue)
}, 1000);
//console.log(inputValue + ' ' + gpsFilterValue)
//setRefreshing(true)
} else {
console.log('test')
}
}
setFilterValue();
}, [])
);
当我在 setTimeout 中调试 gpsFilterValue 时,它保持未定义,但是当我在渲染中创建一个按钮以调试 gpsFilterValue 状态值并按下它时,它已更新。为什么价值观不一样?
解决方案
从外观上看,它gpsFilterValue
是您状态的一部分,因为您在回调中调用了一个状态设置器。但是,您useCallback
没有将gpsFilterValue
其列为依赖项(作为 . 的第二个参数的空数组useCallback
。将其添加到该依赖项列表中,您应该会看到更新的值。
useFocusEffect(
useCallback(() => {
async function setFilterValue() {
let filterValue = await AsyncStorage.getItem('filterValue');
let inputValue = JSON.parse(filterValue);
if (gpsFilterValue === null) {
setGpsFilterValue(inputValue);
console.log('null')
// setRefreshing(true)
} else if (inputValue !== parseInt(gpsFilterValue)) {
setGpsFilterValue(inputValue);
console.log('refreshing1')
setTimeout(() => {
console.log(gpsFilterValue)
}, 1000);
//console.log(inputValue + ' ' + gpsFilterValue)
//setRefreshing(true)
} else {
console.log('test')
}
}
setFilterValue();
}, [gpsFilterValue])
);
推荐阅读
- wso2 - WSO2 EI/ESB - 依次调用多个端点以生成自定义对象
- splunk - 从 Splunk 向外部应用程序发送通知
- c# - .Net Core 2.2 Web API 405
- python - 如果列值在熊猫列表中,则删除行
- mysql - VBA - MySQL UPDATE - 返回代码以确认更新是否完成
- gcc - 安装openpose时我的电脑或我的命令有问题吗?
- c - 程序如何访问结构的变量?
- c# - 是否可以调整 UITabbarcontroller 的子视图的大小?
- javascript - 错误:使用 get 函数时,类型转换表达式应用括号括起来
- javascript - 显示隐藏元素 jquery