Состояние Redux возвращает undefined

Я новичок, когда дело доходит до использования Redux, и у меня возникают проблемы с получением данных из API и доступом к ним через реквизиты Redux. Когда я пытаюсь получить доступ к данным, полученным моим действием, он возвращает значение undefined.

Вот компонент, в котором я пытаюсь использовать данные:

import React, { Component } from 'react';
import dsteem from 'dsteem';
import { Client } from 'dsteem';
import jsonQuery from 'json-query';
import { connect } from 'react-redux';
import { fetchUtopian } from '../actions/Utopian-action';


class Utopian extends Component {
    componentDidMount() {
      this.props.fetchUtopian();
    }


  render() {

   console.info(this.props.data);


    return (
      <div className = "utopian-container">

      </div>
    );
  }
}


const mapDispatchToProps = dispatch => ({
  fetchUtopian: () => dispatch(fetchUtopian())
})

const mapStateToProps = state => ({
  data: state.utopianReducer
})

export default connect(mapStateToProps, mapDispatchToProps)(Utopian);

Вот действие, которое извлекает данные. Я делаю вызов API внутри действия и думаю, что, возможно, он неправильно отформатирован. Опять же, я новичок Redux.

import dsteem from 'dsteem';
import { Client } from 'dsteem';

export function fetchUtopian() {
  return function (dispatch) {
    dispatch({ type: "FETCH_UTOPIAN" });


    const client = new Client('https://api.steemit.com')

    var utopianHot = {
      tag: 'utopian-io',
      limit: 20
    }

     client.database
       .getDiscussions('hot', utopianHot)
       .then((response) => {
         dispatch({ type: "FETCH_UTOPIAN_FULFILLED", payload: response.data })
       })
      .catch((err) => {
        dispatch({ type: "FETCH_UTOPIAN_REJECTED", payload: err })
      })
  }
}

Вот редуктор:

export default function reducer (state = {
  utopianCash: [],
  fetching: false,
  fetched: false,
  error: null,
}, action) {

  switch (action.type) {
    case "FETCH_UTOPIAN": {
      return {...state, fetching: true}
    }
    case "FETCH_UTOPIAN_REJECTED": {
      return {...state, fetching: false, error: action.payload}
    }
    case "FETCH_UTOPIAN_FULFILLED": {
      return {
        ...state,
        fetching: false,
        fetched: true,
        utopianCash: action.payload
      }
    }
  }
  return state;
}

Комбинированные редукторы

// Combine Reducers in this file and export them
import { combineReducers } from 'redux'
import utopianReducer from './Utopian-reducer';

export default combineReducers({
  utopianReducer
})

response.data в "FETCH_UTOPIAN_FULFILLED" возвращает значение undefined. И попытка использовать this.props.data или this.props.data.utopianCash в утопическом компоненте также возвращает undefined.

Как мне успешно получить данные из API в действии, а затем использовать их в компоненте?

Вы не return как редуктор в mapStateToProp. Вы возвращаете конкретную часть магазина. Вы можете показать нам свой файл-редуктор?

Andrew 24.06.2018 02:48

Отредактировал сообщение, чтобы включить редуктор

Nick Kinlen 24.06.2018 02:50

@NickKinlen: Пожалуйста, укажите свой метод combineReducer

Isaac 24.06.2018 03:17

Отредактировано снова, чтобы показать объединенный файл

Nick Kinlen 24.06.2018 03:18

Может быть, консоль зарегистрирует переменную response из вызова getDiscussions и посмотрите, что вы получите? Убедитесь, что это правильная форма и все такое

kingdaro 24.06.2018 03:21

отладку необходимо начать с получения response из вашего api

Andrew 24.06.2018 09:19

Да, посмотрите на вкладку своей сети в Chrome и посмотрите, какой ответ на ваш запрос. Возможно, ваш объект не находится внутри response.data.

Eld0w 24.06.2018 14:18

Если я открою вкладку сети, я увижу запрашиваемые мной данные и получу статус 200. Если я попытаюсь создать console.info reponse.data внутри своего действия после .then (в обещании), он вернет undefined.

Nick Kinlen 24.06.2018 22:21

Должен ли dispatch({ type: "FETCH_UTOPIAN_FULFILLED", payload: response.data }) быть вложен в обещание или это проблема?

Nick Kinlen 24.06.2018 22:22

Вот проект. codeandbox.io/s/github/Nicknyr/Steem.js_API_Tutorial

Nick Kinlen 24.06.2018 23:18
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
10
101
0

Другие вопросы по теме