javascript - 在提供程序中使用函数缺少以前的状态 - nextjs
问题描述
我有这样的提供者:
import {createContext, useContext, useState} from 'react'
// Create Context object.
const CartContext = createContext({
deliveryPersion:'own',//or other
coupon:{},
updateCoupon: (obj) => {},
updateDeliveryPersion: (type) => {},
})
// Export Provider.
export function CartProvider(props) {
const updateCoupon = (_coupon) => {
setState({...state,coupon: _coupon})
}
const updateDeliveryPersion = (type) => {
setState({...state,deliveryPersion: type})
}
const initState = {
deliveryPersion:'own',
coupon:{},
updateCoupon:updateCoupon,
updateDeliveryPersion:updateDeliveryPersion
}
const [state, setState] = useState(initState)
return (
<CartContext.Provider value={state}>
{props.children}
</CartContext.Provider>
)
}
// Export useContext Hook.
export function useCartContext() {
return useContext(CartContext);
}
我的情景:我有两个组件。component1
和component1
。
在里面component1
我更新了deliveryPersion
这样的变量:
...
cartContext.updateDeliveryPersion('other')
在里面component2
我更新了coupon
对象:
const data = {/**/}
cartContext.updateCoupon(data)
在此此处deliveryPersion
更改为默认值。(own
值)。换句话说,我使用更新功能丢失了当前值。
我的问题在哪里?
例如第一个组件:
const cartContext = useCartContext()
cartContext.updateDeliveryPersion(type)
解决方案
推荐阅读
- c - 我可以关闭信号处理程序中的文件描述符吗?
- go - 如何将数据从一种类型复制到具有相同结构的另一种类型?
- matlab - Matlab print() 和 saveas() 覆盖位置输入数据
- javascript - 基于单选按钮的Js计算,以及一些问题
- apache-spark - 为什么我无法连接到 Hive Metastore?
- azure-devops - 如何使用 Linux microsoft 托管代理在 Windows 机器中存储 Azure 管道工件?
- php - 将自定义注册字段扩展到 WooCommerce 中的其他页面
- css - VS Code Extension 自动生成 CSS 代码
- vaadin - Vaadin Flow:删除 PollListener
- python - Pygame敌人不在屏幕上移动