Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 从外部函数React获取数据结果_Javascript_Reactjs_React Native_Ecmascript 6 - Fatal编程技术网

Javascript 从外部函数React获取数据结果

Javascript 从外部函数React获取数据结果,javascript,reactjs,react-native,ecmascript-6,Javascript,Reactjs,React Native,Ecmascript 6,我有一个从json文件获取数据的外部函数,我想用这个函数为我的组件提供问题数据,我如何管理它工作 以下是我尝试过的,但不起作用: 组成部分: screens/QuizzQuestion.js 从“React”导入React,{Component}; 从“react native”导入{视图、文本、样式表、按钮}; 从“../utils/utils”导入{getQuestionData} 导出默认类QuizzQuestion扩展组件{ 建造师(道具){ 超级(道具); 此.state={ 信息:

我有一个从json文件获取数据的外部函数,我想用这个函数为我的组件提供问题数据,我如何管理它工作

以下是我尝试过的,但不起作用:

组成部分:

screens/QuizzQuestion.js

从“React”导入React,{Component};
从“react native”导入{视图、文本、样式表、按钮};
从“../utils/utils”导入{getQuestionData}
导出默认类QuizzQuestion扩展组件{
建造师(道具){
超级(道具);
此.state={
信息:空
};
}
loadData(){
getQuestionData(2)。然后(数据=>{
this.setState({info:data})
});
}
componentDidMount(){
这是loadData();
} 
外部功能:

/utils/utils.js

从“./assets/questions/questions.json”导入*作为数据;
导出函数getQuestionData(n){
返回数据。问题[n];
}
我每次都会犯这样的错误:

TypeError:TypeError:(0,_utils.getQuestionData)(0)。then不是函数。(在“(0,_utils.getQuestionData)(0)中)。then(函数(数据){ _这是2.5秒状态({ 信息:数据 }); })“,”(0,_utils.getQuestionData)(0)。然后是未定义的) *screens\QuizzQuestion.js:20:28在loadData中 *screens\QuizzQuestion.js:26:4在componentDidMount中 -commitLifeCycles中的节点\u modules\react native\Libraries\Renderer\oss\reactiverenderer-dev.js:15036:10 -提交生命周期中的节点\u modules\react native\Libraries\Renderer\oss\reactnativerender-dev.js:16636:8
-来自框架内部的另外18个堆栈帧是同步的,不是承诺。因此,您只需将来自
getQuestionData
的返回值分配到所需的状态属性中

loadData(){
  const data = getQuestionData(2);
  this.setState({ info: data });
}
这将返回数据对象中问题数组中的问题。它不会返回承诺。因此,当您尝试使用它时,它会像返回承诺一样

getQuestionData(2).then(data => {
  this.setState({ info: data })
});
…它将中断并产生该错误

因此,只需抓住问题并设置如下状态:

const question = getQuestionData(2);
this.setState({ info: question });
或者-注意,没有理由这样做-使函数:

const data={问题:['Question1','Question2','Question3']};
异步函数getQuestionData(n){
返回数据。问题[n];
}

getQuestionData(2).then(q=>console.log(q));
getQuestionData
不会返回承诺,但您会尝试像这样使用它。
loadData(){this.setState({info:getQuestionData(2)});}
const question = getQuestionData(2);
this.setState({ info: question });