ObjectAssign превращает bool в объект - PullRequest
0 голосов
/ 05 июля 2018

Я использую Redux и у меня проблемы с редукторами.

isLoading: true - это то, что я отправляю в действии.

isLoading: {} - это то, что я получаю в подпорках после редуктора.

Как это исправить?

Я использую это:

export function movieDiscoverIsLoading(state = false, action) {
    switch (action.type) {
        case MOVIES_DISCOVER_LOADING:
            return Object.assign({}, state, action.isLoading);
        default:
            return state;
    }
}

export function movieDiscoverItems(state = [], action) {
    switch (action.type) {
        case MOVIES_DISCOVER_RESULTS:
            return Object.assign({}, state, action.items);
        default:
            return state;
    }
}

Журналы:

Logs

И дополнительный вопрос: как я могу изменить несколько полей в скопированном объекте, используя Object.assign или оператор распространения?

Когда я попробовал что-то подобное: { ...state, ...{items: action.items, isLoading: false}} У меня есть вложенный объект, где isLoading находится внутри элементов.

Ответы [ 3 ]

0 голосов
/ 05 июля 2018

Вы пытаетесь назначить логическое значение здесь:

return Object.assign({}, state, action.isLoading);

Полагаю, вы хотите присвоить объекту isLoading свойство вместо:

return Object.assign({}, state, { isLoading: action.isLoading });
0 голосов
/ 05 июля 2018

Вы изменяете исходное состояние, переданное редуктору. Похоже, вы должны вернуть boolean вместо object

export function movieDiscoverIsLoading(state = false, action) {
    // it is already boolean           ^^^^^^^^^^^^^
    switch (action.type) {
        case MOVIES_DISCOVER_LOADING:
            // why do you return an object here instead of boolean
            return Object.assign({}, state, action.isLoading);
        default:
            return state;
    }
}

Чтобы исправить это, просто замените:

return Object.assign({}, state, action.isLoading); 

до

return action.isLoading;
0 голосов
/ 05 июля 2018

Вместо этого используйте Lodasd, _.merge будет иметь желаемое поведение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...