我有一个结帐车,你有不同的车项目,并为每一个你可以改变购买前的数量。
代码如下所示:
import React, { useEffect, useState } from "react";
import PureInput from "./PureInput";
import { useForm, Controller } from "react-hook-form";
const CartInner = React.forwardRef(
(
{
control,
element,
value,
handleOnChange,
images,
name,
monthlyAmount,
price,
projectedGrowth,
id,
...inputProps
}: any,
ref: any
) => {
return (
<div className="grid gap-8 grid-cols-2 mb-12 py-6 px-8 border-2 border-slate-200">
<div>
<PureInput
min={200}
max={price}
onChange={handleOnChange}
type="number"
step={200}
defaultValue={element.price}
id={id}
ref={ref}
{...inputProps}
/>
</div>
</div>
);
}
);
export default function Checkout() {
const { control, handleSubmit } = useForm();
const handleOnChange = (index: any, e: any) => {
console.log(e, "e");
};
const onSubmit = async (data: any) => {
console.log(data, "data from Form.tsx");
};
return (
<form onSubmit={handleSubmit(onSubmit)} className="grid gap-8 grid-cols-3">
<div className="col-span-2">
{[0, 2].map((element, index) => {
return (
<fieldset key={index}>
<Controller
render={({ field }) => (
<CartInner
element={element}
handleOnChange={(e) => handleOnChange(index, e)}
{...field}
/>
)}
name={`test.${index}.lastName`}
control={control}
/>
</fieldset>
);
})}
<button>Progess to payment</button>
</div>
</form>
);
}
以及PureInput:
import * as React from "react";
type IProps = any;
const PureInput = React.forwardRef(
({ className, id, onChange, ...inputProps }: IProps, ref: any) => {
return (
<input
id={id}
ref={ref}
onChange={onChange}
type="input"
className={`${className} block w-full bg-white text-black rounded-md border-2 font-bold border-grey-200 text-xl px-4 py-4 focus:border-orange-500 focus:ring-orange-500`}
{...inputProps}
/>
);
}
);
export default PureInput;
提交表单时一切正常。提交表单时,我得到一个数组,其中包含我在input中输入的任何值:
[{lastName: "1600"}
{lastName: "800"}]
我的软件包版本:
"react-dom": "18.2.0",
"react-hook-form": "^7.29.0",
但是我的onChange不再触发了。我怎样才能让onChange触发,这样我就可以在<Checkout />
组件中记录输入的值了?
这里有一个codesandbox,如果有帮助的话
3条答案
按热度按时间p3rjfoxz1#
onChange
事件处理程序仅在输入值更改时调用。在提交表单时不调用。要在提交表单时访问输入值,可以使用
Checkout
组件中react-hook-form
提供的handleSubmit
挂钩。此挂钩将回调函数作为参数,在提交表单时将调用此函数。表单输入值将作为对象传递给此回调函数:db2dz4w82#
the documentation的这一部分让我找到了答案:
h5qlskok3#
您可以进行以下更改以插入onChange事件
希望它能帮助你解决你的问题,
干杯