Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript ';行动';未在Redux中定义_Javascript_Reactjs_Redux_React Redux - Fatal编程技术网

Javascript ';行动';未在Redux中定义

Javascript ';行动';未在Redux中定义,javascript,reactjs,redux,react-redux,Javascript,Reactjs,Redux,React Redux,我尝试为web store购物车组件创建一个减速机,但遇到以下错误: “操作”未定义 我的代码如下: import { CART_ADD_ITEM } from "../constants/cartConstants"; import { addToCart } from '../actions/cartActions'; export const cartReducer = (state = { cartItems: [], action }) => { swi

我尝试为web store购物车组件创建一个减速机,但遇到以下错误:

“操作”未定义

我的代码如下:

 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; 从“../constants/cartConstants”导入{CART_ADD_ITEM}”

export const addToCart=(id,quantity)=>async(dispatch,getState)=>{ const{data}=wait axios.get(
/api/products/${id}


这有什么问题?

您的
reducer
需要一个
action
作为第二个参数。现在,您的代码在默认状态下将
action
作为属性包含,这是不正确的。reducer类型签名可能如下所示:

export const cartReducer=(状态={cartItems:[]},操作)=>{
//还原剂含量在这里
}

您的
reducer
需要一个
操作
作为第二个参数。现在,您的代码将
操作
作为默认状态的属性,这是不正确的。reducer类型签名可能如下所示:

export const cartReducer=(状态={cartItems:[]},操作)=>{
//还原剂含量在这里
}

reducer将初始状态作为第一个参数,操作作为第二个参数

改进

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;
}
 };

减速器将初始状态作为第一个参数,操作作为第二个参数

改进

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;
}
 };

你的reducer签名应该是这样的,而不是在状态中有
action
export-const-cartReducer=(状态={cartItems:[]},action)=>{…}
你将在第二个参数中得到action。更新函数声明:
(状态={cartItems:[]},action)
你的reducer签名应该是这样的,而不是在状态中有
操作
导出const cartdreducer=(状态={cartItems:[]},操作)=>{…}
你将在第二个参数中得到操作。更新函数声明:
(状态={cartItems:[]},操作)