React native 反应本机API数据

React native 反应本机API数据,react-native,React Native,我有一个从API获取数据的类,它返回一个数组 在我这样称呼它的文件中: let defaultMenu2 = ''; import GetCategories from '../constants/tabs'; GetCategories.renderTabs().then((response) => { console.log(response); defaultMenu2 = response; }); console.log('response----------'

我有一个从API获取数据的类,它返回一个数组

在我这样称呼它的文件中:

let defaultMenu2 = '';
import GetCategories from '../constants/tabs';

GetCategories.renderTabs().then((response) => {
    console.log(response);
    defaultMenu2 = response;
});
console.log('response----------' + defaultMenu2);
console.log完美地显示了数组(在控制台中),但变量“defaultMenu2”始终为空

有人知道我做错了什么吗

提前谢谢

有人能解释一下如何持久化变量吗?当然不知道为什么我不能覆盖变量或对象

我试过这个:

let tabs2 = new Object();
GetCategories.renderTabs().then((response) => {
    //console.log(response);
    tabs2 = response;
    alert('number 1 response #########'+JSON.stringify(tabs2));
});

alert('response#########' + JSON.stringify(tabs2));
“1号响应”警报完美地显示了我所需的内容,但其他“响应”警报是空对象

  • 有一个包含数据的文件tabs.js:

    导出默认选项卡={ 交易:[ {id:'communityPartner',标题:'communitypartner13'}, {id:'localBusiness',title:'localBusiness'}, {id:'非营利',标题:'非营利'}, {id:'help',title:'help'}, {id:'志愿者',标题:'志愿者'}, {id:'student',title:'student'}, {id:'谢谢',标题:'谢谢'}, ], };

  • 有一个新文件tabs2.js,带有对真实数据的API调用:

    常数APItabs=''

    导出默认类GetCategories{ 静态renderTabs=async()=>{ tabsArrayholder=[]; 返回等待获取(APItabs) .then((response)=>response.json()) .然后((responseJson)=>{ tabsArrayholder=responseJson; 返回标签盒; }) .catch((错误)=>{ 控制台错误(error); }); }; }

  • 在Screens.js文件中,调用了tabs.js(虚拟数据):

    从“../constants/tabs”导入选项卡

  • 然后数据呈现为选项卡。交易。。。。没有任何问题

  • 我将tabs2.js添加到Screens.js中(一旦它开始工作,它应该替换tabs

    设tabs2=新对象(); 从“../constants/tabs2”导入GetCategories

    GetCategories.renderTables().then((响应)=>{ tabs2=响应; 警报('No.1 response(第1号响应)\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'+JSON.stringify(tabs2)); }))

    警报('response#########'+JSON.stringify(tabs2))

  • 我的意图是将tabs2重命名为tabs..这样之后所有的代码都是相同的


    问题是我认为GetCategories.RenderTables()下面的代码是在GetCategories.RenderTables()重播之前呈现的..

    在您的示例中,renderTabs似乎返回了类似PromiseLike的内容,这表明它是异步发生的。这意味着很可能是打印“response---------”后,
    然后
    的效果会执行。请看一看示例,了解如何使用
    useEffect
    异步检索数据>useState
    hooks。在数据存储到defaultMenu2之前,您的控制台正在调用,这就是为什么您将其设置为空的原因。谢谢,我将用所有代码编辑我的问题…这样可能会更清楚。我有一个进行API调用的外部文件,然后在主文件中它是数据的虚拟调用,我想用真实数据替换它。我想将它存储在同一个变量名上,这样我就不会更改很多代码。看看我现在更新代码的主要问题……正如@artcasbody提到的,为了能够从示例中检索异步数据,您必须使用
    useState
    useffect
    挂钩。renderTabs似乎返回了一些PromiseLike,这表明它是异步发生的。这意味着
    然后
    的效果很可能在您打印“response---------”后执行。请看一看示例,了解如何使用
    useffect
    useState
    挂钩异步检索数据。您的控制台在获取数据之前正在调用g存储在defaultMenu2中,这就是您将其设置为空的原因。谢谢,我将用所有代码编辑我的问题…这样可能会更清楚。我有一个外部文件来进行API调用,然后在主文件中它是数据的伪调用,我想用真实数据替换。我想将它存储在同一个变量名上,这样我就不会更改l代码的ot。看看我现在更新代码的主要问题……正如@artcasbody提到的,为了能够检索异步数据,您必须使用
    useState
    useffect
    挂钩