Функция Redux Reducer имеет пустое состояние - PullRequest
0 голосов
/ 21 ноября 2018

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

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

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;

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

1 Ответ

0 голосов
/ 23 ноября 2018

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

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;
    }
}

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

...