当前位置: 首页 > 知识库问答 >
问题:

React Native-使用useState传递API响应数据的问题

松越
2023-03-14

我试图理解为什么我的API响应数据没有显示出来。我已经用console.log测试了我的响应数据是否正确。

在我的TopCryptoList.js组件中,我试图根据我的API调用响应数据在平板列表上显示数据。结果数据应该来自发生API调用的useResults.js文件。出于某种原因,我无法从useResults.js获取“结果”数据到我的TopCryptoList.js组件。

我是不是错过了什么明显的东西?我只是在学习使用React、状态和钩子。当我console.log(response.data)在useResults.jsaxios.get调用之后,我得到正确的JSON响应数据。然而,当我console.log(结果)在我的TopCryptoList我得到空对象,因此Flatlist不能呈现任何可见的东西。

TopCryptoList.js:

import React from 'react';
import { View, Text, FlatList, StyleSheet, TextBase } from 'react-native';
import { createAppContainer } from 'react-navigation';
import useResults from '../hooks/useResults';

const TopCryptoList = ( ) => {

    const [searchCrypto, results] = useResults();

    console.log("THIS WE HAVE: " + results);

    return (
        <View style={styles.container}>
            <FlatList
                showsVerticalScrollIndicator={false}
                data={ results }
                keyExtractor={( result ) => result.id}
                renderItem={({ result }) => {
                    return (
                        <Text style={styles.item}>{result.name}</Text>
                    );
                }}
            />
        </View>
    )  
}

useResults.js:

import { useEffect, useState } from 'react';
import axios from 'axios';

export default () => {

const [results, setResults] = useState([]);

const options = {
    method: 'GET',
    params: {
        'id': '1,2'
    },
    headers: {
        'Accept': 'application/json',
        'Content-Type': 'application/json;charset=UTF-8',
        'X-CMC_PRO_API_KEY': 'my api key'
    },
    json: true,
    gzip: true
  };

const searchCrypto = async () => {
    try {
        const response =  await axios.get('https://pro- 
                          api.coinmarketcap.com/v1/cryptocurrency/quotes/latest', options);
        setResults(response.data);
    } catch (error) {
        console.log(error);        
    }
}

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

return [searchCrypto, results];

}

共有1个答案

从智志
2023-03-14

你不能在Flatlist中使用对象,你需要从你的响应中创建一个数组,你可以像这样编辑search chCrypto函数:

useResults.js

const searchCrypto = async () => {
    try {
        const response =  await axios.get('https://pro- 
                          api.coinmarketcap.com/v1/cryptocurrency/quotes/latest', options);

        const newArr = [];
        Object.keys(response.data.data).map( (key,index)=>{

            newArr.push(response.data.data[key]);
        });

        // console.log(newArr)
         setResults(newArr)

    } catch (error) {
        console.log(error);        
    }
}

最后在renderItem中,你可以只使用项目而不是结果

import React from 'react';
import { View, Text, FlatList, StyleSheet, TextBase } from 'react-native';
import { createAppContainer } from 'react-navigation';
import useResults from '../hooks/useResults';

const TopCryptoList = ( ) => {

    const [searchCrypto, results] = useResults();

    console.log("THIS WE HAVE: " + results);

    return (
        <View style={styles.container}>
            <FlatList
                showsVerticalScrollIndicator={false}
                data={ results }
                keyExtractor={( item) => item.id}
                renderItem={({ item}) => {
                    return (
                        <Text key={ item.id } style={styles.item}>{item.name}</Text>
                    );
                }}
            />
        </View>
    )  
}

我已经试过了它管用希望这对你有帮助

 类似资料:
  • My mainactivity.xml:包括一个textview和ListView。 我的问题是如何使用ArrayAdapter将响应从volley传递到listview?

  • 我正在尝试一些简单的方法,使用FetchAPI从应用程序前端发出请求,如下所示 我在服务器上像这样处理这个请求, 但是,当我尝试访问前端console.log(响应)上的数据时,会得到以下对象 响应主体为空。我想那就是数据显示的地方?如何有效地从服务器传递数据?

  • 我在更新react native和react后出现此错误 我认为这是正确的语法,但我不知道为什么显示这个错误: SyntaxError:导出时出现意外标记= 。在模块上运行InthisContext(vm.js:53:16) _在对象上编译(module.js:387:25) 。模块_扩展。。js(module.js:422:10) 在模块中。在函数处加载(module.js:357:32) 。模

  • 我是VueJs的新手 "https://github.com/coreui/coreui-free-vue-admin-template/blob/master/src/views/base/Tables.vue" 在上面的vue中。我想动态地将数据分配给“someData”变量。我试着像下面那样把它绑起来,但没用。

  • 问题内容: 我可以选择该项目并在Webdriver上检索信息。但是我不知道如何将响应URL传递给crawlspider。 所以这就是我被困住的地方。我能够使用上面的代码进行查询。但是,如何将resp_for_scrapy传递给crawlspider?我把resp_for_scrapy代替了item,但这没用。 任何建议将不胜感激!!!! 编辑我包括一个中间件类,可从Spider类之前的下拉列表中进