我无法 return 在 React Native 中解析信息

I can't return parsing information in React Native

我是一名初学者程序员,我决定制作我的第一个项目 - 天气应用程序。虽然我有问题,但我无法将解析后的信息显示在屏幕上,但如果我使用 console.log,信息会显示在控制台中。

我在现场做所有这些:https://snack.expo.io/

                   Copying you the codes and comment inside it console.logs


        **CODE**

 import React, { Component, createElement } from 'react';
    import {
      StyleSheet,
      Text,
      View,
      Image,
      ImageBackground,
      ActivityIndicator,
    } from 'react-native';

    class App extends Component {
      constructor(props) {
        super(props);
        this.state = {
          todos: [],
          isLoading: true,
        };
      }

      componentDidMount = async () => {
        fetch(
          'API'
        )
          .then(res => res.json())
          .then(data => {
            this.setState({ todos: data });

          })
          .catch(error => console.error(error))
          .finally(() => {
            this.setState({ isLoading: false });
          });
      };

      render() {
        const { data, isLoading } = this.state;
        return (
          <View>
          <Text>
          {data.sys.id}
          </Text>
          </View>
        );
      }
    }

    export default App;

谢谢!

我通过创建天气 api 来处理您的代码,这与您的 api 相似,并对代码进行了一些更改,现在可以正常工作,请检查此代码。

这是我从 API 获取的天气数组,我也使用你的天气 API

 Object {
    "description": "light intensity drizzle",
    "icon": "09d",
    "id": 300,
    "main": "Drizzle",
  },

代码:

import React, { Component, createElement } from 'react';
        import {
          StyleSheet,
          Text,
          View,
          Image,
          ImageBackground,
          ActivityIndicator,
        } from 'react-native';

        class App extends Component {
          constructor(props) {
            super(props);
            this.state = {
              todos: [],
              isLoading: true,
            };
          }

          componentDidMount = async () => {
            fetch(
              'https://samples.openweathermap.org/data/2.5/weather?q=London&appid=439d4b804bc8187953eb36d2a8c26a02'
            )
              .then(res => res.json())
              .then(data => {
                this.setState({ todos: data });
              })
              .catch(error => console.error(error))
              .finally(() => {
                this.setState({ isLoading: false });
              });
          };

          render() {
            return (
                <View style={{flex:1,justifyContent:"center",alignItems:"center"}}>
                    <Text>Hello</Text>
                    <Text>
                        {this.state.todos.weather != undefined ? this.state.todos.weather[0].description : null}
                    </Text>
                    <Text>
                        {this.state.todos.weather != undefined ? this.state.todos.weather[0].main : null}
                    </Text>
                </View>
            );
          }
    }

    export default App;

希望对您有所帮助!

首先你使用了错误的对象名称。

这是错误的。

const { data, isLoading } = this.state;

没错。

const { todos, isLoading } = this.state;

其次 这是因为您正在尝试访问未定义的对象。

应用程序将加载并呈现页面。然后发出 Api 请求。 所以数据不存在。您可以设置默认值或添加检查。

render() {
    const { todos, isLoading } = this.state;
      return (
        <View>
          <Text>
           {todos.weather > 0 && todos.weather[0].description}
          </Text>
        </View>
      );
   }