REDUX: Ошибка: у действий может не быть неопределенного свойства "type". Вы ошиблись константой? - PullRequest
1 голос
/ 15 января 2020

Я изучаю Redux, и я очень озадачен тем, что здесь происходит. Я использую thunk, и GET_ITEMS находится в моем редукторе, поэтому я не уверен, что я сделал неправильно? Ошибка в dispatch(getItemsAction());

Redux. js

function reducer(state, action) {
    switch (action.type) {
        case 'GET_ITEMS':
            return {
                ...state,
                items: action.payload,
                loading: false,
            };
        case 'ADD_ITEM':
            return {
                ...state,
                items: [...state.items, action.payload],
            };
        case 'DELETE_ITEM':
            return {
                ...state,
                items: state.items.filter(item => item.id !== action.payload),
            };
        case 'ITEMS_LOADING':
            return {
                ...this.state,
                loading: true,
            };
        default:
            return state;
    }
}

export const getItemsAction = () => ({
    return(dispatch) {
        axios.get('api/items').then(response => {
            console.log(response);
            dispatch({ type: 'GET_ITEMS', payload: response.data });
        });
    },
});

ShoppingList. js

import { addItemAction, deleteItemAction, getItemsAction } from '../redux';

export default function ShoppingList() {
    const items = useSelector(state => state.items);

    const dispatch = useDispatch();
    const addItem = name => dispatch(addItemAction(name));
    const deleteItem = id => dispatch(deleteItemAction(id));

    useEffect(() => {
        dispatch(getItemsAction());
    }, []);

Ответы [ 2 ]

6 голосов
/ 15 января 2020

в верхнем коде вы вернули отправку неверным способом, но на самом деле вам нужно вызвать dispatch, например, cb, например, в javascript мы делаем что-то вроде этого

const myfunc = () => cb => {
    cb('OK')
};

его обратный вызов в javascript и Вы должны вернуть отправку, как обратный вызов, чтобы работать правильно

export const getItemsAction = () => dispatch => {
    axios.get('api/items').then(response => {
            dispatch({
                type: 'GET_ITEMS',
                payload: response.data
            })
    });
};

в конце не забыл получить топор ios данные ответа с response.data

0 голосов
/ 15 января 2020

правильный синтаксис для действия

export const getItemsAction = () => dispatch => {
    axios.get('/api/items').then(res =>
        dispatch({
            type: 'GET_ITEMS',
            payload: res.data,
        })
    );
};
...