2017-01-06 45 views
1

學習JavaScript和React Native我似乎並不理解如何將json響應放入我可以訪問的變量中。我已經看過this,this,this以及Mozilla文檔和this以及更多,但似乎仍然沒有把握這個概念或使其工作。將讀取加載到變量中React Native

export default class AwesomeApp extends Component { 

constructor(props) { 
    super(props); 
    this.state = { questions: [] }; 
} 

componentWillMount() { 
    this.getQuestionsFromAPI().then((res) => { 
     this.setState({ 
     questions: res 
     }); 
    }); 

    let url = 'http://127.0.0.1:3000/trivia'; 

    async function getQuestionsFromAPI() { 
     fetch(url).then(response => response.json()) 
     .then(function(json) { 
     questions = json; 
     //console.log(questions[0]); 
     return questions;}) 
     .catch(error => console.log(error)); 
    } 
    } 

render() { 
return (
    <View style={styles.container}> 
    <Text style={styles.question}> 
     { this.props.questions[0] } 
    </Text> 
    <View style={{ flex: 1, padding: 20 }}> 
     <CheckBox 
     label={ this.props.questions } 
     checked={false} 
     onChange={(checked) => console.log('I am checked', checked)} 
     /> 
    </View> 
AppRegistry.registerComponent('AwesomeApp',() => AwesomeApp); 

我得到的錯誤「undefined是不是(評估 'this.getQuestionsFromAPI()')在瀏覽器中看着它,設置功能: VAR任務= getQuestionsFromAPI() 返回一個承諾

Promise {[[PromiseStatus]]: "resolved", [[PromiseValue]]: undefined} 

console.log(questions[0]); 

返回一個對象,這是我想要的。我是什麼不明白?

+0

您沒有在getQuestionsFromAPI中返回承諾。嘗試在第一行添加'return'。你是否也可以重新縮進你的代碼,目前還不清楚這些函數屬於哪個對象。 – FMCorz

+0

你的意思是在函數被調用後? ['return fetch(url)...'],我得到了'undefined不是一個函數(評估'this.getQuestionsFromAPI()')'在android模擬器中,但在瀏覽器中返回'PromiseStatus:resolved'和' PromiseValue:Array [4]'。我的挑戰是把它變成顯示變量。 – driftavalii

回答

0

上面發送的代碼示例中存在一些問題。首先,如果您正確縮進代碼,您會注意到函數getQuestionsFromAPI已在componentWillMount中聲明。這意味着當你使用this來引用它時,它不會被找到。

其次,getQuestionsFromAPI不返回承諾。你應該return fetch(...)

最後,您試圖使用this.props.questions來獲得問題,但是您正在分配狀態中的問題,因此您應該使用this.state.questions代替。

+0

謝謝,我結束了使用ES5和getInitialState,因爲我發現更容易理解,但比較你的答案,他們似乎達到了同樣的目的。 – driftavalii

相關問題