Javascript ';行动';未在Redux中定义
我尝试为web store购物车组件创建一个减速机,但遇到以下错误: “操作”未定义 我的代码如下: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
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:[]},操作)