React Native操作AsyncStorage出现current ST t No undefined报错如何解决
React Native AsyncStorage存值undefined问题排查方案
- 首先检查
setSTNo函数的传参逻辑
你当前代码中setSTNo()为无参调用,如果你需要将接口返回的工单字段作为工单编号存入状态,需要明确传入对应字段值。例如要用工单id作为编号,修改为setSTNo(json.data.id)即可。 - 校验接口返回的字段正确性
在你现有的console.log('Ticket Data',json.data)日志处,查看完整返回结构:- 确认你需要读取的工单编号字段是否真实存在,是否有拼写错误、大小写不匹配、下划线和驼峰命名不匹配的问题
- 确认返回的
json.data是否为数组类型,如果你拿到的是数组需要先取下标对应的值再取字段,比如json.data[0].id
- 处理React状态异步更新的时序问题
React的状态更新函数是异步执行的,如果你在调用setSTNo后立刻读取该状态存入AsyncStorage,此时状态还未完成更新,取到的就是初始值undefined。可以用两种方式规避:- 直接把接口拿到的工单编号值传给AsyncStorage存储逻辑,不依赖刚更新的状态
- 用
useEffect监听STNo对应的状态,状态变化后再执行AsyncStorage存储操作,示例:
useEffect(() => { if(stNo) { AsyncStorage.setItem('ST_No', String(stNo)) } }, [stNo])
- 检查AsyncStorage的存储规则
AsyncStorage仅支持存储字符串类型的值,如果你要存的工单编号是数字、对象等其他类型,需要先做类型转换,取值时再反向转换即可。 - 补充请求异常捕获逻辑
在fetch的链式调用末尾添加catch回调,避免接口请求报错时没有日志无法定位问题:
.catch(err => console.log('工单接口请求异常:', err))
内容的提问来源于stack exchange,提问作者Ryan Fonseka
相关产品推荐
相关产品推荐

