Reactjs 将react钩子窗体控制器链接到状态值
我试图将react-hook表单控制器链接到一个状态值,但它没有呈现该值Reactjs 将react钩子窗体控制器链接到状态值,reactjs,react-forms,Reactjs,React Forms,我试图将react-hook表单控制器链接到一个状态值,但它没有呈现该值 import { Controller, useForm } from "react-hook-form"; ... // here is my fields values const [ addBill, setAddBill ] = useState({ debitAmt: '', invoiceNumber: '', memo: '', invoiceDate:
import { Controller, useForm } from "react-hook-form";
...
// here is my fields values
const [ addBill, setAddBill ] = useState({
debitAmt: '',
invoiceNumber: '',
memo: '',
invoiceDate: moment().format('YYYY-MM-DD'),
});
// here is how I'm rendering the Controller Input
<FormGroup className="mr-10 mb-10">
<Label for="debitAmt" className="mr-sm-10">Debit Amt</Label>
<Controller
render={ ({value}) => {
return (
<NumberFormat
value={value}
thousandSeparator={true}
prefix={"$"}
onValueChange={(v) => {
setAddBill({...addBill, debitAmt: v.floatValue === undefined ? '' : v.floatValue})
}}
/> );
}}
name="debitAmt"
id="debitAmt"
variant="outlined"
defaultValue={addBill.debitAmt}
value={addBill.debitAmt}
getInputRef={register({ required: true })} aria-invalid={errors.debitAmt ? "true" : "false"}
control={control}
className="form-control"
style={setErrorStyle(errors.debitAmt)}
/>
{errors.debitAmt && (
<span style={{ color: "red" }} role="alert">required</span>
)}
</FormGroup>
它不会更新NumberFormat的值。如何将控制器连接到状态变量?正如您在上看到的,控制器的渲染方法procue value和onChange属性。您应该这样使用:
<Controller
render={ ({value, onChange}) => {
return (
<NumberFormat
value={value}
thousandSeparator={true}
prefix={"$"}
onValueChange={(v) => {
setAddBill({...addBill, debitAmt: v.floatValue === undefined ? '' : v.floatValue});
onChange(v);
}}
/> );
}}
name="debitAmt"
id="debitAmt"
variant="outlined"
defaultValue={addBill.debitAmt}
value={addBill.debitAmt}
getInputRef={register({ required: true })} aria-invalid={errors.debitAmt ? "true" : "false"}
control={control}
className="form-control"
style={setErrorStyle(errors.debitAmt)}
/>
在React钩子窗体中,默认情况下,您不需要控制输入状态。如果让RHF保存,您可以使用或通过提交表单来检索状态。我想您只是在我的代码中添加了onChange。这并没有解决问题你忘了读答案的最后一部分。要工作,您应该让RHF管理状态。要检索数据,请使用handleSubmit。也许一个代码沙盒可以帮上忙。
<Controller
render={ ({value, onChange}) => {
return (
<NumberFormat
value={value}
thousandSeparator={true}
prefix={"$"}
onValueChange={(v) => {
setAddBill({...addBill, debitAmt: v.floatValue === undefined ? '' : v.floatValue});
onChange(v);
}}
/> );
}}
name="debitAmt"
id="debitAmt"
variant="outlined"
defaultValue={addBill.debitAmt}
value={addBill.debitAmt}
getInputRef={register({ required: true })} aria-invalid={errors.debitAmt ? "true" : "false"}
control={control}
className="form-control"
style={setErrorStyle(errors.debitAmt)}
/>