Redux возвращает ошибку «Действия должны быть простыми объектами. Используйте специальное промежуточное ПО для асинхронных действий». хотя промежуточное ПО определено

Я хотел бы использовать redux-thunk для асинхронного действия redux, но redux возвращает ошибку: «Действия должны быть простыми объектами. Используйте специальное промежуточное ПО для асинхронных действий».

Я не использую веб-пакет, вместо этого я объединяю все файлы js в один файл. Я знаю, что моя проблема может быть вызвана этим, но пока мне нужно решение без веб-пакета, если это возможно.

Вот определение магазина

const pricingStore = Redux.createStore(
    pricingReducer,
    Redux.applyMiddleware(window.ReduxThunk.default)
    // using UMD redux-thunk from https://npmcdn.com/[email protected]/dist/redux-thunk.min.js
);

const {Provider} = ReactRedux;

$(document).ready(() => {
    const pricingContainer = document.getElementById('containerPricing');

    if (pricingContainer) {
        parsePricingData();
        const render = () => {
            ReactDOM.render(
                <Provider store={Redux.createStore(pricingReducer)}>
                    <Pricing />
                </Provider>,
                pricingContainer
            );
        };

        render();
        pricingStore.subscribe(render);
    }
});

Вот действие

function uploadInvoices() {
    console.log('works here');

    return function () {
        console.log('doesnt log this msg');

        return null;
    };
}

Призыв к действию

const { connect } = ReactRedux;

let FileUpload = ({dispatch}) => {
    return (
        <input type="file" name="image" multiple onChange={(e) => dispatch(uploadInvoices())} />
    );
};

FileUpload = connect()(FileUpload);

Пожалуйста, помогите мне с решением


person Thomas B.    schedule 06.04.2017    source источник


Ответы (1)


Действия — это простые объекты JavaScript. Действия должны иметь свойство типа, указывающее тип выполняемого действия. Типы обычно должны быть определены как строковые константы. Когда ваше приложение станет достаточно большим, вы можете переместить их в отдельный модуль.

Это из документов Redux. Казалось бы, ваша проблема связана с тем, что ваше действие возвращает что-то отличное от объекта.

Просто чтобы уточнить немного больше. Предполагается, что действие ничего не делает, кроме как возвращает объект, который как минимум имеет свойство типа, переданное редюсеру. Если вы хотите использовать преобразователь для обработки асинхронного потока, это должно произойти ДО вызова действия. Поток будет примерно таким. Вызовите редукционный преобразователь из вашего подключенного компонента, затем преобразователь отправляет действие и передает ему любую полезную нагрузку, которая может ему понадобиться. Наконец, действие вернет только объект и не будет иметь собственной логики.

person Chaim Friedman    schedule 06.04.2017