【问题标题】:The state of this element is Undefined for first time?这个元素的状态是第一次未定义?
【发布时间】:2020-02-21 08:20:14
【问题描述】:

我正在尝试在我的应用程序中创建切换开关,我是 redux 的新手。在非常努力并在网上到处寻找之后发布这个问题。请帮助。 我的减速机如下:

const initialState = {
    preview: "off",
    cards:
};

const cardReducer = (state = initialState, action) => {
        switch (action.type) {

            case "FIND_ALL_CARDS":
                return {
                    cards: action.cards
                };
            case "DELETE_CARD":
                return {
                    cards: state.cards.filter(card => card.id !== action.cardId)
                };
            case "CREATE_CARD":
                return {
                    cards: [...state.cards, action.card]
                };
            case "PREVIEW":
                console.log(state); // I get cards[] in the state but no preview.
                let swtch = "on";
                if (state.preview === "on") {
                    swtch = "off";
                }
                console.log(state.preview); // Undefined 

                return {
                    cards: state.cards,
                        preview: swtch
                };
            default:
                return state;
        }

我的组件已正确连接

const stateToPropertyMapper = state => ({
  cards: state.cards.cards,
  preview: state.cards.preview
});

我第一次切换开关时未定义,但在第一次切换后我得到了状态。 请帮助我

【问题讨论】:

  • let swtch = "on" 为什么不isSwitchOn = true?更好的是,你为什么还有swtch?只需返回preview: !state.preview。您的状态值是一个布尔值,那么为什么要将它与字符串进行比较?
  • 我已编辑。我也尝试过这样做。第一次状态:预览未定义,但再次单击切换开关后,我的控制台中出现“开启”、“关闭”
  • 添加了我的控制台的图片。任何见解请@JMadelaine

标签: javascript reactjs redux react-redux web-deployment-project


【解决方案1】:

基本上,从 reducer 中,您返回的是状态的副本,当您返回 {cards: []} 时,您将丢失状态中的所有其余道具。 当您在 FIND_ALL、DELETE 和 Create CARD 中改变状态时,您还需要返回状态的其余部分。像这样编辑

case "FIND_ALL_CARDS":
    return {
        ...state
        cards: action.cards
     };

在所有动作中都这样做,当你改变一个时不要忘记传递先前的状态道具

【讨论】:

  • 谢谢,但我的问题在于案例:“PREVIEW”。现在没有方法调度“FIND_ALL_CARDS”。无论如何我都会纠正的。请帮忙
  • 是的,但如果在此之前你有 FIND_ALL_CARDS 或带有 CARD 的东西,你正在从状态中删除预览,然后当你切换审查时未定义
猜你喜欢
  • 2021-11-13
  • 1970-01-01
  • 2018-11-26
  • 1970-01-01
  • 1970-01-01
  • 2018-08-08
  • 1970-01-01
  • 2021-09-20
  • 1970-01-01
相关资源
最近更新 更多