我有这个表格,我想传递total的值。
**对于total
:**我已经能够传递cart
的值,这是一个数组。
const [total, setTotal] = useState<number | undefined>(undefined);
const calculateTotal = () => {
return cart.reduce((total, item) => total + item.price * item.quantity, 0);
};
useEffect(() => {
const calculatedTotal = calculateTotal();
setTotal(calculatedTotal);
},[cart])
const addOrderInfo = addCustomerOrder.bind(null, cart)
字符串
表单返回函数内部:
<form action={addOrderInfo}>
//input fields here
</form>
型
提交表格:
export default async function addCustomerOrder(cart: any, formData: FormData): Promise<{ message: string }> {
const cookieStore = cookies()
const supabase = createServerActionClient({ cookies: () => cookieStore })
console.log(formData, "formData")
console.log(cart, "prev state")
try{
//rest of the data here
return { message: `Succesfully added the data` }
}catch(e){
return {message: "Failed to submit the form."}
}
}
型
1条答案
按热度按时间wqsoz72f1#
在找到问题的根源之前,这里有一些东西需要清理,这将有所帮助。
total
是从状态项cart
派生的,所以实际上,total
根本不应该使用useState
。这样做“工作”,但当你手动管理从其他状态计算的状态时,这是一种代码气味。如果你忘记保持它们同步,这往往会导致错误。useMemo
是正确的工具。回到主要的问题上。没有必要做像
addCustomerOrder.bind(null, cart)
这样的事情,这不是你在React中做这类事情时通常看到的模式。你可以简单地定义一个新的闭包,其中包括额外的信息,并将其传递给主处理程序。将您发布的顶部区块的 all 替换为:
字符串
将窗体 Package 替换为
型
现在更改
addCustomerOrder
的签名:型