मेरे पास एक बाहरी फ़ंक्शन है जो एक जेसन फ़ाइल से डेटा प्राप्त करता है, और मैं अपने घटक के लिए प्रश्नों के लिए प्रश्न डेटा रखने के लिए इस फ़ंक्शन का उपयोग करना चाहता हूं, मैं इसे काम करने के लिए कैसे प्रबंधित कर सकता हूं?

यहां मैंने कोशिश की है और यह काम नहीं करेगा:

घटक :

Screens/QuizzQuestion.js


import React, { Component } from 'react';
import { View, Text, StyleSheet, Button} from 'react-native';
import { getQuestionData } from '../utils/utils'

export default class QuizzQuestion extends Component {
  constructor(props) {
    super(props);
    this.state = {
      info:null
    };
  }

loadData(){
    getQuestionData(2).then(data=>{
      this.setState({ info: data })
  });
  }

  componentDidMount() {
    this.loadData();
  } 

बाहरी कार्य:

/utils/utils.js


import * as data from "../assets/questions/questions.json";

export function getQuestionData(n){
   return data.questions[n];
}

मुझे हर बार यह त्रुटि होती है:

लेखन त्रुटि: लेखन त्रुटि: (0, _utils.getQuestionData)(0)। तब कोई फ़ंक्शन नहीं है। ('(0, _utils.getQuestionData)(0) में। तब (फ़ंक्शन (डेटा) { _this2.setState({info: data}); })', '(0, _utils.getQuestionData)(0).then' अपरिभाषित है) * Screens\QuizzQuestion.js:20:28 in loadData * Screens\QuizzQuestion.js:26:4 ComponentsDidMount में - node_modules\react-native\Libraries\Renderer\oss\ReactNativeRenderer-dev.js:15036:10 in commitLifeCycles - node_modules\react-native\Libraries\Renderer\oss\ReactNativeRenderer-dev.js:16636:8 commitAllLifeCycles में - ... फ्रेमवर्क इंटर्नल से 18 और स्टैक फ्रेम

0
Moonlight56 27 अक्टूबर 2019, 21:33

2 जवाब

सबसे बढ़िया उत्तर
export function getQuestionData(n){
  return data.questions[n];
}

यह आपके डेटा ऑब्जेक्ट में आपके प्रश्न सरणी से प्रश्न लौटाता है। यह वादा नहीं लौटाता है। तो जब आप कोशिश करते हैं और इसका इस्तेमाल करते हैं जैसे यह एक वादा देता है ...

getQuestionData(2).then(data => {
  this.setState({ info: data })
});

... यह उस त्रुटि को तोड़ देगा और उत्पन्न करेगा।

तो बस प्रश्न को पकड़ें और राज्य को इस तरह सेट करें:

const question = getQuestionData(2);
this.setState({ info: question });

वैकल्पिक रूप से - ध्यान दें कि ऐसा करने का कोई कारण नहीं है - फ़ंक्शन को async:

const data = { questions: ['Question1', 'Question2', 'Question3'] };

async function getQuestionData(n){
  return data.questions[n];
}

getQuestionData(2).then(q => console.log(q));
0
Andy 27 अक्टूबर 2019, 21:46

getQuestionData समकालिक है और वादा नहीं है। इसलिए, आपको बस वांछित राज्य संपत्ति में getQuestionData से लौटाए गए मान को निर्दिष्ट करने की आवश्यकता है।

loadData(){
  const data = getQuestionData(2);
  this.setState({ info: data });
}
0
Nick 27 अक्टूबर 2019, 21:39