当前位置: 首页 > 知识库问答 >
问题:

动作在Redux中没有定义

刁丰羽
2023-03-14

我试图创建一个网络商店购物车组件的减速器,但我遇到了这个错误:

“操作”未定义

我的代码如下:

 import { CART_ADD_ITEM } from "../constants/cartConstants";
 import { addToCart } from '../actions/cartActions';
 export const cartReducer = (state = { cartItems: [], action }) => {
switch(action.type){
    case CART_ADD_ITEM:
        const item = action.payload;
        //we check if the item exists in state
        const existItem = state.cartItems.find(x => x.product === item.product);
        
        if(existItem){
            return {
                ...state,
                cartItems: state.cartItems.map(x => x.product === existItem.product ? item : x),
            }
        } else {
            return {
                ...state,
                cartItems : [...state.cartItems, item],
            }
        }
    default:
        return state;
}
 };

这就是cartActions的样子。似乎以前的代码必须以某种方式使用它,但是如何使用呢?从“axios”导入axios;从“…”导入{CART\u ADD\u ITEM}/常数/常数';

导出常量addToCart=(id,数量)=

dispatch({
    type: CART_ADD_ITEM,
    payload: {
        product: data._id,
        name: data.name,
        image: data.image,
        price: data.price,
        countInStock: data.countInStock,
        quantity,
    }
});
//once dispatched, we wnt ot save an item to local storage added to cart to local storage
//we get it in store.js 
localStorage.setItem('cartItems', JSON.stringify(getState().cart.cartItems));
 }

这有什么问题?

共有2个答案

养俊驰
2023-03-14

还原器以初始状态为第一个参数,动作为第二个参数。

改进了

let initialState = {cartItems: []}
export const cartReducer = (state = initialState, action) => {
switch(action.type){
    case CART_ADD_ITEM:
        //we check if the item exists in state
        const existItem = state.cartItems.find(x => x.product === action.payload.product);
        
        if(existItem){
            return {
                ...state,
                cartItems: state.cartItems.map(x => x.product === existItem.product ? action.payload : x),
            }
        } else {
            return {
                ...state,
                cartItems : [...state.cartItems, action.payload],
            }
        }
    default:
        return state;
}
 };
赵君植
2023-03-14

您的减少器期望一个操作作为第二个参数。现在,您的代码包含action作为默认状态下的属性,这是不正确的。减速机类型签名应该是这样的:

export const cartReducer = (state = { cartItems: [] }, action) => {
  // Reducer content here
}
 类似资料:
  • 问题内容: 在这里找不到有关此错误的任何信息: “存储区没有有效的reducer。请确保传递给CombineReducers的参数是一个值为reducer的对象。” 我的减速机 合路器 我的商店配置 问题答案: 您的陈述不正确。无论您使用一起, 或者 使用,如果你有出口。 换句话说,将更改为,或将import语句从更改为。

  • 我是通过npm安装来安装节点模块的,然后我在终端上尝试了gulp sass watch。和get ReferenceError:primordials未定义错误,如下所示,请帮助我解决此问题:- 提前感谢您。

  • 我正在用Apache CXF构建Spring Boot应用程序。当尝试添加swagger时,我没有在spec中定义任何操作!错误,尽管我通过注释指定了1-2个操作。Swagger的CXF配置部分如下: 我相信功能设置不正确。我错过了什么?api-docs的链接如下所示:http://localhost:8080/cxf/todo_list/api-docs?url=/cxf/todo_list/s

  • 本文向大家介绍在redux中,什么是reducer?它有什么作用?相关面试题,主要包含被问及在redux中,什么是reducer?它有什么作用?时的应答技巧和注意事项,需要的朋友参考一下 reducer的作用 : 根据 action 对象的type 来更新状态. reducer的工作方式 : 接收一个 state 参数, 作为初始的 state 接收一个action对象, 在函数体中用 switc

  • 问题内容: 当我将商店从道具传递到其他组件时,它变得不确定。我正在使用时会发生这种情况,但如果没有这种情况,它会很好。路线部分 路线在组件中 布局方法 我正在像这样通过应用程序组件传递商店 该商店将从这样的布局组件转到主体组件 在主体组件中,我是从正在node.js服务器中运行的api获取的 我在功能中出现错误 错误 无法读取未定义的属性“地图” 奇怪的是,当我在没有路线的情况下工作时,一切都会好

  • 从研究中,我发现thunk是一种工具,您可以使用它将动作链接在一起和/或处理回调、异步动作和副作用。 我无法理解thunk中间件指南。他们总是引用store.dispatch(就像大多数关于redux的教程一样),但我从未真正调用调度,也从未访问过商店,所以我不确定如何实现他们提出的任何建议。(我假设这是因为我在反应中使用mapDispatchToProps......这在我的动作创建者文件中不是