Функция Redux Reducer имеет пустое состояние

Это немного странно для меня, потому что мой массив состояний пуст в функции одного и того же редуктора, а не в другом.

Итак, мой редуктор выглядит так -

export function booksHasErrored(state = false, action) {
     //console.log(action.type);
    switch (action.type) {
        case 'BOOKS_HAS_ERRORED':
            return action.hasErrored;
        default:
            return state;
    }
}

export function booksIsLoading(state = false, action) {
    switch (action.type) {
        case 'BOOKS_IS_LOADING':
            return action.isLoading;
        default:
            return state;
    }
}

export function books(state = [], action) {
    switch (action.type) {
        case 'BOOKS_FETCH_DATA_SUCCESS':
            return action.books;
        default:
            return state;
    }
}

export function updateBook(state = [], action) {
    console.log('updateBook');
    console.log(state);
    console.log(action);
    switch (action.type) {
        case 'BOOK_UPDATE':
            return state;
        default:
            return state;
    }
}

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

Вот как я комбинирую свои редукторы -

import {combineReducers} from 'redux';
import {routerReducer} from 'react-router-redux';
import { books, booksHasErrored, booksIsLoading,updateBook } from './books';
import { search, searchHasErrored, searchIsLoading } from './search';
import { authors, authorsHasErrored, authorsIsLoading } from './authors';

//import authors from './authors';
//console.log(books);
const rootReducer = combineReducers({ books,booksHasErrored,booksIsLoading,updateBook,authors,search, searchHasErrored, searchIsLoading, authors, authorsHasErrored, authorsIsLoading,routing:routerReducer});

export default rootReducer;

Пожалуйста, дайте мне знать, если вам нужна дополнительная информация, и я добавлю ее сюда.


person nasaa    schedule 21.11.2018    source источник
comment
Вы должны объявить состояние параметра как пустое в функции? Возможно, это влияет, попробуйте установить состояние вместо состояния = []   -  person Eliâ Melfior    schedule 23.11.2018
comment
state = [] - это просто способ es6 установить пустой массив по умолчанию.   -  person nasaa    schedule 23.11.2018


Ответы (1)


Возможно, я обнаружил вашу проблему, вы не возвращаете полное состояние, вы возвращаете действие

export function books(state = [], action) {
    switch (action.type) {
        case 'BOOKS_FETCH_DATA_SUCCESS':
            return action.books;
        default:
            return state;
    }
}

Вам нужно создать новое состояние и изменить его, а затем вернуть, например:

export function books(state = [], action) {
    switch (action.type) {
        case 'BOOKS_FETCH_DATA_SUCCESS':
            return state.set('books', action.books);
        default:
            return state;
    }
}

Можете ли вы изменить его и посмотреть, работает ли он?

person Eliâ Melfior    schedule 23.11.2018