reactjs - TypeError: dispatch is not a function React button
问题描述
嗨,我是新来的反应,我只是不明白为什么这不起作用。
这是我的 product.js 文件,当我单击“addToBasket”按钮时,我试图更改状态
import React from "react";
import "./Product.css";
import { useStateValue } from "./StateProvider";
function Product({ id, title, image, price, rating }) {
const { dispatch } = useStateValue();
const addToBasket = () => {
dispatch({
type: "ADD_TO_BASKET",
item: {
id: id,
title: title,
image: image,
price: price,
rating: rating,
},
});
};
return (
<div className="product">
<div className="product__info">
<p>{title}</p>
<p className="product__price">
<small>$</small>
<strong>{price}</strong>
</p>
<div className="product__rating">
{Array(rating)
.fill()
.map((_) => (
<p>⭐</p>
))}
</div>
</div>
<img src={image} alt="" />
<button onClick={addToBasket}>Add to basket</button>
</div>
);
}
export default Product;
所以我可以改变这些状态之一。我有我需要的所有依赖项,仔细检查。无法理解是我的错误还是一些错误
export const initialState = {
basket: [],
user: null,
};
export const getBasketTotal = (basket) =>
basket?.reduce((amount, item) => item.price + amount, 0);
const reducer = (state, action) => {
console.log(action);
switch (action.type) {
case "SET_USER":
return {
...state,
user: action.user,
};
case "ADD_TO_BASKET":
return {
...state,
basket: [...state.basket, action.item],
};
case "REMOVE_FROM_BASKET":
let newBasket = [...state.basket];
const index = state.baslet.findIndex(
(basketItem) => basketItem.id === action.id
);
if (index >= 0) {
newBasket.splice(index, 1);
} else {
}
return { ...state, basket: newBasket };
default:
return state;
}
};
export default reducer;
编辑:这是我的 StateProvider.js
import React, { createContext, useContext, useReducer } from "react";
export const StateContext = createContext();
export const StateProvider = ({ reducer, initialState, children }) => (
<StateContext.Provider value={useReducer(reducer, initialState)}>
{children}
</StateContext.Provider>
);
export const useStateValue = () => useContext(StateContext);
解决方案
推荐阅读
- swift - 如何将字符串转换为 UIColor (Swift)
- javascript - 如何更改我搜索的文本颜色?
- android - ADB 命令显示删除帐户屏幕
- python - 尝试在 python 中使用 hyperopt 调整最近邻居时出错
- powershell - Get-InstalledModule 和 Get-Module -ListAvailable 有什么区别?
- r - 基于 R 中的 varimp 自动选择变量
- c# - 使用 jquery 刷新局部视图
- r - R中data.frames列表的子集
- python - Wagtail 文档:大文件大小 (>2GB) 上传失败
- c - 如何修复非标量类型转换错误