как получить доступ к топору ios с помощью реакции - PullRequest
0 голосов
/ 29 апреля 2020

я создаю генератор котировок с помощью реакции. У меня проблемы с доступом к объекту внутри массивов. просмотр всех массивов в порядке, но когда я пытаюсь указать, какой ключ мне нужен, он говорит, что не может прочитать свойство undefined

class Quote extends React.Component{
   state = {
       quotes : []

   }


componentDidMount(){
axios.get('https://gist.githubusercontent.com/camperbot/5a022b72e96c4c9585c32bf6a75f62d9/raw/e3c6895ce42069f0ee7e991229064f167fe8ccdc/quotes.json').then(res=>{
this.setState({
    quotes: res.data.quotes
    })
})
}
render(){
    console.log(this.state.quotes[0])

, это код, который работает, и он показывает результат, подобный следующему:

   {quote: "Life isn’t about getting and having, it’s about giving and being.", author: "Kevin Kruse"}

но когда я использую это вместо:

   console.log(this.state.quotes[0].quote)

ошибка говорит:

   TypeError: Cannot read property 'quote' of undefined

1 Ответ

1 голос
/ 29 апреля 2020

Данные рендера изначально недоступны и загружаются асинхронно после первоначального рендера. Вам нужно либо использовать состояние загрузки, либо условно получить доступ к состоянию

class Quote extends React.Component{
   state = {
       quotes : []
       isLoading: true,
   }


componentDidMount(){

    axios.get('https://gist.githubusercontent.com/camperbot/5a022b72e96c4c9585c32bf6a75f62d9/raw/e3c6895ce42069f0ee7e991229064f167fe8ccdc/quotes.json').then(res=>{
        this.setState({
            quotes: res.data.quotes,
            isLoading: false,
            })
        })

}
render(){
    if(this.state.isLoading) return <div>Loading...</div>

    console.log(this.state.quotes[0])
...