Я боролся с этим последние 18 часов и не могу понять, что делаю не так. У меня есть настройка redux, и я правильно отправляю действия и получаю состояние для других компонентов, но в одном компоненте я хочу отправить действие по щелчку, которое затем вызывает api и устанавливает состояние приложения в redux с результатами api.

Но он просто ничего не возвращает. Я могу вручную установить полезную нагрузку со строкой, если я жестко запрограммировал это, чтобы я знал, что действие запускается нормально. Я также проверил, что api работает нормально, и я даже попытался заменить api фиктивными результатами jsontypicode, чтобы увидеть, имеет ли это значение, но это не так. Может ли кто-нибудь, пожалуйста, ПОМОГИТЕ указать мне в правильном направлении ??

Вот мой код.

ДЕЙСТВИЕ:

import axios from 'axios';
import { SET_POSTS } from "./types";

export const setPosts = () => dispatch => {
    axios
        .get(`https://jsonplaceholder.typicode.com/todos/`)
        .then(res =>
            dispatch({
                type: SET_POSTS,
                payload: res.data,
                settingCorrect: true
            })
        )
        .catch(err =>
            dispatch({
                type: SET_POSTS,
                payload: {}
            })
        );
};

РЕДУКТОР:

import { SET_POSTS } from '../actions/types';

const initialState = {
    loading: true,
};

export default function(state = initialState, action){

    const { type, payload } = action;

    switch(type){
        case SET_POSTS:
            return {
                ...state,
                posts: payload,
                loading: false
            }
        default:
            return state;
    }

}

ПРИЛОЖЕНИЕ:


    selectUnit = (e,unit) => {
            this.props.setPosts();
            this.props.setHistoricalData(unit);
    };

   ....

const mapDispatchToProps = (dispatch) => {
    return {
        setPosts: () => {
            dispatch({
                type: 'SET_POSTS',
            })
        },
        setHistoricalData: (history) => {
            dispatch({
                type: 'GET_HISTORICAL_DATA'
            })
        }
    }
};

export default connect(mapStateToProps,mapDispatchToProps)(Posts);
0
Stephanie Parker 29 Окт 2019 в 04:05
Похоже, вы на самом деле не передаете никаких данных сообщения в setPosts. Это намеренно?
 – 
Nick
29 Окт 2019 в 04:08

1 ответ

Лучший ответ

Похоже, вы просто не используете действие create в mapDispatchToProps. Если я правильно понимаю вашу архитектуру, следующее будет правильным mapDispatchToProps:

const mapDispatchToProps = (dispatch) => {
    return {
        setPosts: () => {
            dispatch(setPosts())
        },
        setHistoricalData: (history) => {
            dispatch(getHistoricalData(history))
        }
    }
};

Не забывая импортировать ваши функции создателя действий.

0
Nick 29 Окт 2019 в 04:11
Не совсем уверен, правильно ли setHistoricalData, потому что вы не поделились этим создателем действия. Скорее всего, вам нужно передать ему history.
 – 
Nick
29 Окт 2019 в 04:12
Спасибо. Я не могу в это поверить, но я забыл импортировать действие!
 – 
Stephanie Parker
29 Окт 2019 в 04:27
Не беспокойтесь, это случается с лучшими из нас!
 – 
Nick
29 Окт 2019 в 04:27