Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Reactjs 将react钩子窗体控制器链接到状态值_Reactjs_React Forms - Fatal编程技术网

Reactjs 将react钩子窗体控制器链接到状态值

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:

我试图将react-hook表单控制器链接到一个状态值,但它没有呈现该值

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)}
/>