[英]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.