我目前正在研究我的课程的顶峰,但我必须使用多个异步函数.我需要使用AsyncStorage、SQLite存储和从REST API获取.我遇到的问题是,当我必须从rest API获取并将其置于状态时.我不知道为什么,但它只在我第二次加载我的应用程序时才起作用.我可能是expo 的一个问题,但我对此表示怀疑.我只是需要一些帮助.以下是所有相关代码:

const [menuItems, setMenuItems] = useState();

const fetchMenuItemsFromAPI = async () => {
        try {
            const response = await fetch('https://raw.githubusercontent.com/Meta-Mobile-Developer-PC/Working-With-Data-API/main/capstone.json');
            const json = await response.json();
            setMenuItems(Object.values(json.menu));
        } catch (e) {
            console.error('Error:', e);
        }
}

useEffect(() => {
        
        fetchMenuItemsFromAPI();
        
},[]) 

我不知道为什么它只在我第二次加载应用程序时才加载.如果任何人有任何反馈,或者可以将我重定向到一个资源,该资源将比课程更好地教我异步函数,我将无比感激.即使是Reaction Native的文档也说这就是你做这件事的方式,所以我非常困惑.

我以前曾try 在useEffect挂钩中定义该函数,但没有成功.我认为还值得注意的是,当我使用诸如:console.log(Object.values(json.menu))之类的值时,它会打印出我需要它打印的东西,但当我try 在我的setMenuItems()中设置这个精确值时,它就是不能以我需要的方式工作.

推荐答案

从我在代码中看到的它应该工作,也许问题不是状态更新,而是呈现新的"menuItems"值的问题. 你可以在第一次使用下面的代码时判断它是否很好地更新了状态,可能它很好地更新了值,问题在于这些值的呈现.

useEffect(() => {
  console.log("Menu items value:", menuItems);
},[menuItems]) 

React-native相关问答推荐

如何在Reaction Native DrawerNavigation中添加注销功能

React Native 在每个页面加载时调用数据库

React-Native:无法从我的 android 应用程序打开设备设置

更改所选标签栏元素的底部边框 colored颜色

ReactNative 0.43-rc.2 FlatList -- 试图获取超出范围索引 0 的框架

create-react-native-app myproject和react-native init myproject之间的真正区别是什么

如何在 React Native 中本地存储不是字符串的数据

library not found for -lRCTGeolocation

React Native - SectionList numColumns support

React Native:如何获取文件大小、mime 类型和扩展名?

react-native createbottomtabnavigator 隐藏标签栏标签

使用 Jest 测试 React Native 应用程序

Rich ReactNative TextInput

使用来自另一个页面的 fetch 调用函数返回结果值

区别需要MainQueueSetup 和dispatch_get_main_queue?

使用 typescript react-native - 如何使用来自 @react-navigation/native 的 useRoute 和 typescript

React Native,AppStore 请求 NSLocationAlwaysUsageDescription 值

React Native:如何将文件拆分为多个文件并导入它们?

react-native iOS 应用在部署后不显示静态/本地资源

React-Native 获取 XML 数据