javascript - TypeError : undefined is not an object , 项目来自 API 的数组

标签 javascript arrays reactjs api react-native

export default class LaunchingScreen extends React.Component {

  constructor(props) {
    super(props);
    this.state = {
      isLoading: true,
      dataSource: null,
      refreshing: false
    };
  }

//When screen is pulled down this calls for fresh through the state its int

  _onRefresh = () => {
    this.setState({ refreshing: true });
    this.componentDidMount().then(() => {
      this.setState({ refreshing: false });
    });
  };
//Gets data from API 
  componentDidMount() {
    return fetch("https://launchlibrary.net/1.4/launch?mode=verbose")
      .then(response => response.json())
      .then(responseJson => {
        this.setState({
          isLoading: false,
          dataSource: responseJson.launches
        }); 
      })
      .catch(error => {
        console.log(error);
      });
  }
//Renders Screen
  render() {
    //Refresh if statement
    if (this.state.isLoading) {
      return (
        <View style={styles.container}>
          <ActivityIndicator />
        </View>
      );
    } else {
        //Launches is what its called on later to display what is being said in launches
        let launches = this.state.dataSource.map((item, key) => {
        return (
          <View key={key} style={styles.container}>
              <View style={styles.subcontainer}>
              <Text>{item.missions[0].name}</Text>
              </View>
          </View>
        );
      });
      //Allows the screen to be scrollable w/ refresh control 
      return (
        <View style={styles.Background}>
          <ScrollView
            contentContainerStyle={styles.contentContainer}
            refreshControl={
              <RefreshControl
                refreshing={this.state.refreshing}
                onRefresh={this._onRefresh}
              />
            }
           >
            {launches}
          </ScrollView>
        </View>
      );
    }
  }
}

我遇到的问题是从数组中的启动库 API 获取数据(任务名称)。我获取数据并将它们放入项目/键中。当我通过 item.missions[0].name 调用任务名称(missions[0] 是数组)时,我得到一个 TypeError: undefined is not an object。有人告诉我必须检查任务是否未定义,但我不明白解决方案。

最佳答案

假设您有一个数组并且它实际上包含值,您正试图获取数组的索引 (0)。

您可以这样检查并确保:

<Text>
  {Array.isArray(item.missions) && item.missions.length && item.missions[0].name}
</Text>

这将检查该值是否实际上是一个长度大于 0 的数组,以便您可以访问 0 索引。

关于javascript - TypeError : undefined is not an object , 项目来自 API 的数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52681949/

相关文章:

javascript - 我如何创建一个返回 204 的 url

javascript - sequelize - 无法添加外键约束

javascript - 分离表示和逻辑组件react/redux

javascript - 如何在 Vue 开关更改时触发事件

javascript - 如何根据特定键对嵌套数组的索引进行排序?

javascript - 从 Javascript 对象获取 CSV 值

php - 使用 Laravel 获取数组键而不是值

c - 数组参数指针错误?

javascript - 如何在我的 React 应用程序中使用 React-compound-timer

javascript - 如何管理未知数量的文本区域的状态?