简体   繁体   English

反应 redux,数组 state 未更新

[英]React redux, array state not updating

I have a very simple reducer, as seen below.我有一个非常简单的减速器,如下所示。 When I call generateDeck(), I can see the GENERATE_DECK_COMPLETE action being picked up by the reducer in the react dev tools, but the shuffledDeck Array never gets updated in the state.当我调用 generateDeck() 时,我可以看到减速器在 react 开发工具中拾取 GENERATE_DECK_COMPLETE 操作,但 shuffledDeck 数组从未在 state 中更新。

I'm sure it's something small and silly but I can't see what.我敢肯定这是一件小而愚蠢的事情,但我看不出是什么。

import { suits } from '../common/suits';
import { displayNames } from '../common/displayNames';
import { valueMap } from '../common/valueMap';

/**
 * Actions
 */
export const GENERATE_DECK_COMPLETE = 'deck/GENERATE_DECK_COMPLETE';

export const SELECT_CARD = 'deck/SELECT_CARD';
export const DESELECT_CARD = 'deck/DESELECT_CARD';
export const EMPTY_ACTION = 'deck/EMPTY_ACTION';

/**
 * Initial State
 */
const initialState = {
    shuffledDeck: [],
    selectedCards: []
};

/**
 * Reducer function
 * @param {*} state 
 * @param {*} action 
 */
export default function reducer(state = initialState, action = {}) {
    const { type, payload } = action;

    switch(type) {
        case GENERATE_DECK_COMPLETE:
            return {
                ...state,
                shuffledDeck: [...payload.shuffledDeck]
            };

        case SELECT_CARD:
            return {
                ...state,
                selectedCards: state.selectedCards.push(payload)                
            };
        case DESELECT_CARD:
            return {
                ...state,
                selectedCards: payload.filteredCards
            };

        default:
            return state;
    }
}

/**
 * Create a 52 card deck
 */
export const generateDeck = () => (dispatch) => {
    const deck = [];

    for (const suit of suits) {
        for (const displayName of displayNames) {
            deck.push(createCard(suit, displayName));
        }
    }

    const shuffledDeck = deck.sort(() => Math.random() - 0.5);

    dispatch({
        type: GENERATE_DECK_COMPLETE,
        payload: {
            shuffledDeck
        }
    });
}

shuffledDeck array state push like shuffledDeck 数组 state 推像

case GENERATE_DECK_COMPLETE:
     return {
         ...state,
         shuffledDeck: [...state.shuffledDeck,...payload.shuffledDeck]
     };
switch(type) {
        case GENERATE_DECK_COMPLETE:
            return {
                ...state,
                shuffledDeck: [...state.shuffledDeck,...payload.shuffledDeck]
            };

        case SELECT_CARD:
            return {
                ...state,
                selectedCards: state.selectedCards.push(payload)                
            };
        case DESELECT_CARD:
            return {
                ...state,
                selectedCards: payload.filteredCards
            };

        default:
            return state;
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM