Невозможно получить доступ к объекту массива внутри объекта - PullRequest
0 голосов
/ 05 октября 2018

Я не могу получить доступ к объекту массива внутри объекта.

[Обновление:] Я извлекаю данные из следующего API и сохраняю их в exchangeURL

"https://api.cryptonator.com/api/full/btc-usd"

Здесь я отправляю действие, которое сохраняет response.data из этогоapi

    export const exchangeToDisplay = (exchangURL) => {
    return function (dispatch) {
        dispatch({type: EXCHANGE_CURRENCY_FETCHING })
        axios.get(exchangURL).then((response) => {
            console.log(response)
        return(
            dispatch({
                type: EXCHANGE_CURRENCY_FETCH_SUCCESS,
                payload: response.data
            })
        )
        }).catch((error) => {
            console.log(error)
            return (
            dispatch({
                type: EXCHANGE_CURRENCY_FETCH_ERROR,
                payload: error
            })
            )
        })
    }
}

Теперь я являюсь компонентом реагирования с состоянием (рендеринга), когда я делаю что-то вроде этого

   if (!this.props.exchangeLoading && !this.props.exchangeError) {
             console.log(this.props.exchange.ticker)
        }

он выдает / дает мне следующий ответ

{base: "BTC", target: "USD", price: "6566.31298848", volume: "28234.81119471", change: "-3.03860702", …}
   base: "BTC"
   change: "-3.03860702"
   markets: (13) [{…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}]
   price: "6566.31298848"
   target: "USD"
   volume: "28234.81119471"
   __proto__: Object

Теперь я хочу получить доступ к массиву рынков внутри данного объекта, поэтому я сделал что-то вроде этого

 if (!this.props.exchangeLoading && !this.props.exchangeError) {
    console.log(this.props.exchange.ticker["markets"])
    }

Он выдает ошибку типа, говорящую Ошибка типа: не удается прочитать свойства 'markets' из неопределенного

[Примечание:] Выше биржевого реквизита идет из магазина приставок

const mapStateToProps = state => {
    return {
        exchange: state.exchange.DataSucess,
        exchangeLoading: state.exchange.DataFetching,
        exchangeError: state.exchange.DateError
    }
}

Вопрос: Что я здесь не так делаю?Дайте мне знать, если мне нужно поделиться чем-то еще

1 Ответ

0 голосов
/ 05 октября 2018

Я предполагаю, что вы используете Redux.Из того, что я могу сказать, похоже, что вы пытаетесь использовать ресурс в render (), который может быть еще недоступен.Существует пакет под названием redux-subscriber , который вы должны использовать для того, чтобы «следить» за изменениями в вашем хранилище Redux.Смотрите мой пример ниже:

 componentDidMount() {
    subscribe('exchange.updated', state => {
      this.setState({ exchange: state.exchange.data })
    })
  }

И в вашем методе render () вы должны использовать this.state.exchange.поскольку React автоматически выполняет рендеринг компонента при изменении состояния.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...