You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何遍历AsyncStorage返回的列表?React异步操作问题排查

解决AsyncStorage数据获取与渲染问题

1. 修复fetchValues函数的返回值问题

你的fetchValues函数未返回获取到的数据,导致await后拿不到结果。修改后让它返回解析后的数据,同时处理数据不存在或报错的场景:

const fetchValues = async () => {
    try {
      const storedData = await AsyncStorage.getItem("@registration");
      // 存储数据不存在时返回空数组,避免后续渲染报错
      return storedData ? JSON.parse(storedData) : [];
    } catch (err) {
      console.log("error in list getting: ", err);
      // 出错时也返回空数组,保证渲染流程正常
      return [];
    }
};

2. 修正useEffect的异步写法

useEffect的回调不能直接是async函数(async函数会返回Promise,而useEffect仅允许返回清理函数或undefined)。需在useEffect内部定义异步函数并调用:

// 初始值设为空数组,避免map遍历时报错
const [data, setData] = React.useState([]);

React.useEffect(() => {
  // 内部定义异步函数
  const loadRegistrationData = async () => {
    const registrations = await fetchValues();
    setData(registrations);
  };
  // 执行异步函数
  loadRegistrationData();
}, []); // 空依赖数组,确保组件挂载时仅执行一次

3. 完成列表渲染

直接使用data数组遍历渲染,注意key的取值(若数据无唯一key字段,可组合startTime与endTime作为唯一标识):

return (
  <View>
    {data.map((item) => (
      <View key={`${item.startTime}-${item.endTime}`}>
        <Text style={styles.itemStyle}>{item.startTime}</Text>
      </View>
    ))}
  </View>
);

内容的提问来源于stack exchange,提问作者Rasmus

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 23:40:28