如何在 React Native 中的对象中获取特定值?

Posted

技术标签:

【中文标题】如何在 React Native 中的对象中获取特定值?【英文标题】:How to get a specific value in an Object in React Native? 【发布时间】:2020-10-14 17:34:52 【问题描述】:

我目前正在使用 React Native 和 iTunes 的搜索 API 编写我的第一个应用程序。

我放了一个 TextInput 和一个 Button,它返回与文本对应的所有专辑。点击相册后,它会获取其唯一 ID 并搜索此相册的详细信息。

export function getAlbumDetailFromApi(id)

  return fetch('https://itunes.apple.com/lookup?id='+id)
  .then((response) => response.json())
  .catch((error) => console.log(error));

这是课程:


class AlbumDetail extends React.Component 
  constructor(props) 
    super(props)
    this.state = 
      album: undefined,
      isLoading: true
    
  

  componentDidMount() 
    console.log(this.props.navigation.state.params.idAlbum)
    getAlbumDetailFromApi(this.props.navigation.state.params.idAlbum).then(data => 
      this.setState(
        album: data,
        isLoading: false
      )
    )
  

  _displayLoading() 
    if (this.state.isLoading) 
      return (
        <View style=styles.loading_container>
          <ActivityIndicator size='large' />
        </View>
      )
    
  

  _displayFilm() 
    const  album  = this.state

    console.log(album.results.artistId)
    console.log()
    if (album != undefined) 
      return (
        <ScrollView style=styles.scrollview_container>
          <Text style=styles.title_text>name of the album should go here</Text>     
        </ScrollView>
      )
    
  

  render() 
    return (
      <View style=styles.main_container>
        this._displayLoading()
        this._displayFilm()
      </View>
    )
  

如果我的专辑 ID 是“1474669063”,该函数将返回:

API's response

但这是我的问题。也许它超级简单,但我已经尝试了我找到的所有东西,但我无法访问数据......

有人可以帮帮我吗?

【问题讨论】:

错误是什么? @GauravRoy 它说'未定义不是一个对象(评估'album.results') 请不要在标题中添加“SOLVED”。当一个答案被接受时,它会自动将问题标记为已解决,因此不需要在标题中使用它。 【参考方案1】:

抓取:

  getAlbumDetailFromApi(id) 
    return fetch('https://itunes.apple.com/lookup?id='+id)
      .then(response => response.json())
      .then(data => 
        // set the state here, we access the first object of the results array with data.results[0
        this.setState(album: data.results[0])
        )
    .catch((error) => console.log(error));
  

渲染方法:

componentDidMount() 
    this.getAlbumDetailFromApi(1474669063);
  
  renderAlbum() 
    // if we have an album display it 
    if (this.state.album) 
      return (
        <View>
        <Text> Arist: this.state.album.artistName</Text>
        <Text> Release Date: this.state.album.releaseDate</Text>
        </View>
      );
    
    
  
  render() 
    console.log('state', this.state);
    return (
    <View style=styles.container>
        this.renderAlbum()
    </View>
  );
  

演示

https://snack.expo.io/aKlDZLLbF

【讨论】:

@nicvlas 不客气。请接受我的答案(通过单击我的答案旁边的复选图标)并投票(通过按我的答案旁边的“^”)。谢谢【参考方案2】:

问题出在函数getAlbumDetailFromApi

它不返回响应。它正在返回promise

考虑到您的代码,您应该使用async/await 并仅返回响应。所以,你的setState 有数据部分。

export async function getAlbumDetailFromApi(id) 
  try 
    const response = await fetch('https://itunes.apple.com/lookup?id=' + id);
    return response.json();
   catch (error) 
    console.log(error);
  

【讨论】:

感谢您的帮助!但是现在,您知道我如何访问“结果”中的数据吗?我总是得到'未定义不是对象'谢谢:)

以上是关于如何在 React Native 中的对象中获取特定值?的主要内容,如果未能解决你的问题,请参考以下文章

从数组中的对象获取数据-REACT NATIVE

如何从 React Native 中的 JSON 获取数据?

如何在reducer中专门使用redux来获取react-native中的API?

如何在 Metro 中获取 React Native 变体?

React Native:如何从循环中获取值到钩子 useState

React-Native WebView postMessage获取json对象