微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

我无法在 REACTJS 上使用 onChange、useState 和 spread 运算符输入我的输入

如何解决我无法在 REACTJS 上使用 onChange、useState 和 spread 运算符输入我的输入

这是我设置初始状态的方法,我使用预定义的变量来计算保险公司的数量,然后我创建了一个文本框,他们可以在其中填写他们的姓名、ID 等。

   function fields() {
        for (let i = 1; i <= pax; i++) {
            this[`insuredType${i}`] = state[`insuredType${i}`];
            this[`insuredBirthDate${i}`] = state[`insuredBirthDate${i}`];
            this[`insuredIdType${i}`] = state[`insuredIdType${i}`];
            this[`insuredIdNumber${i}`] = state[`insuredIdNumber${i}`];
            this[`insuredLastName${i}`] = state[`insuredLastName${i}`];
            this[`insuredFirstName${i}`] = state[`insuredFirstName${i}`];
        }
    }

    var object = new Array(pax);
    for (let i = 1; i <= pax; i++) {
        object = new fields();
    }

    const [insuredForm,setInsuredForm] = useState(object);

    const handleForm = (e) => {
        console.log([e.target.name]);
        setInsuredForm({ ...insuredForm,[e.target.name]: e.target.value });
    };

    useEffect(() => {
        console.log(insuredForm);
    },[insuredForm]);

然后这是我的表单,我认为我的问题出在我的句柄表单上,如果我将其更改为 defaultValue 它可以工作,但是当我将我的 insuranceTypes 更改为 self 时,它不会将数据值复制到文本框。

    const tabList = [];
    const tabBody = [];
    //const tabForm = [];
    for (let i = 1; i <= pax; i++) {
        tabList.push(
            <li key={i} className="nav-item" role="presentation">
                <a
                    className={i === 1 ? "nav-link active" : "nav-link"}
                    role="tab"
                    data-toggle="tab"
                    href={`#tab-${i}`}
                >
                    Insured {i}{" "}
                    {(errors["insuredType" + i] ||
                        errors["insuredBirthDate" + i] ||
                        errors["insuredLastName" + i] ||
                        errors["insuredFirstName" + i] ||
                        errors["insuredIdType" + i] ||
                        errors["insuredIdNumber" + i]) && (
                        <span role="alert" style={{ color: "#FC9191" }}>
                            <FontAwesomeIcon
                                icon={faExclamationCircle}
                                style={{ marginRight: 2 }}
                                size="1x"
                            />
                        </span>
                    )}
                </a>
            </li>
        );
        tabBody.push(
            <div
                key={i}
                className={i === 1 ? "tab-pane active" : "tab-pane"}
                role="tabpanel"
                id={`tab-${i}`}
            >
                {getTabContent(i)}
            </div>
        );
    }

    //console.log(tabForm);
    function getTabContent(id) {
        //if (insuredForm) console.log(insuredForm);
        let newDiv,type,tbirthDate,tidType,tidNumber,tlastName,tfirstName,treadOnly;

        let insuredType,insuredBirthDate,insuredIdType,insuredIdNumber,insuredLastName,insuredFirstName;

        type = insuredForm[`insuredType${id}`];

        tbirthDate =
            insuredForm[`insuredType${id}`] === "Self"
                ? birthDate
                : insuredForm[`insuredBirthDate${id}`];
        tidNumber =
            insuredForm[`insuredType${id}`] === "Self"
                ? idNumber
                : insuredForm[`insuredIdNumber${id}`];
        tlastName =
            insuredForm[`insuredType${id}`] === "Self"
                ? state.phLastName
                : insuredForm[`insuredLastName${id}`];
        tfirstName =
            insuredForm[`insuredType${id}`] === "Self"
                ? state.phFirstName
                : insuredForm[`insuredFirstName${id}`];
        tidType =
            insuredForm[`insuredType${id}`] === "Self"
                ? idType
                : insuredForm[`insuredIdType${id}`];

        treadOnly = insuredForm[`insuredType${id}`] === "Self" ? true : false;

        insuredType = {
            defaultValue: type,onChange: handleForm,};
        insuredBirthDate = {
            defaultValue: tbirthDate || "",readOnly: treadOnly,};
        insuredIdType = {
            value: tidType || "",};
        insuredIdNumber = {
            value: tidNumber || "",};
        insuredLastName = {
            value: tlastName || "",};
        insuredFirstName = {
            value: tfirstName || "",};

        newDiv = (
            <form onChange={handleSubmit(handleCheck)}>
                <div
                    className="row mt-2"
                    style={{ marginBottom: -15 }}
                    key={id}
                >
                    <div className="col-sm-12">
                        {errors["insuredType" + id] && (
                            <p role="alert" className="errorHandler mb-0">
                                - {errors["insuredType" + id].message}
                            </p>
                        )}
                        {errors["insuredBirthDate" + id] && (
                            <p role="alert" className="errorHandler mb-0">
                                - {errors["insuredBirthDate" + id].message}
                            </p>
                        )}
                        {errors["insuredIdNumber" + id] && (
                            <p role="alert" className="errorHandler mb-0">
                                - {errors["insuredIdNumber" + id].message}
                            </p>
                        )}
                        {errors["insuredLastName" + id] && (
                            <p role="alert" className="errorHandler mb-0">
                                - {errors["insuredLastName" + id].message}
                            </p>
                        )}
                        {errors["insuredFirstName" + id] && (
                            <p role="alert" className="errorHandler mb-0">
                                - {errors["insuredFirstName" + id].message}
                            </p>
                        )}
                    </div>
                </div>
                <div className="row">
                    <div className="col-md-6 py-3">
                        <div className="row">
                            <div className="form-group col-sm-6">
                                <label>Type&nbsp;</label>
                                <select
                                    name={`insuredType${id}`}
                                    {...insuredType}
                                    ref={register({
                                        required: "Type of insurer is required",})}
                                    className={
                                        errors["insuredType" + id]
                                            ? "form-control is-invalid"
                                            : "form-control"
                                    }
                                >
                                    <option value="">Select type</option>
                                    <option>Self</option>
                                    <option>Other</option>
                                    <option>FAO</option>
                                </select>
                            </div>
                            <div className="form-group col-sm-6">
                                <label>Birthdate&nbsp;</label>
                                <input
                                    type="date"
                                    name={`insuredBirthDate${id}`}
                                    {...insuredBirthDate}
                                    ref={register({
                                        required: "Birthdate is required",})}
                                    className={
                                        errors["insuredBirthDate" + id]
                                            ? "form-control is-invalid"
                                            : "form-control"
                                    }
                                />
                            </div>
                        </div>
                        <div className="row">
                            <div className="form-group col-sm-6">
                                <label>Last Name&nbsp;</label>
                                <input
                                    type="text"
                                    name={`insuredLastName${id}`}
                                    placeholder="Last Name"
                                    {...insuredLastName}
                                    ref={register({
                                        required: "Last name is required",})}
                                    className={
                                        errors["insuredLastName" + id]
                                            ? "form-control is-invalid"
                                            : "form-control"
                                    }
                                />
                            </div>
                            <div className="form-group col-sm-6">
                                <label>First Name&nbsp;</label>
                                <input
                                    type="text"
                                    name={`insuredFirstName${id}`}
                                    placeholder="First Name"
                                    {...insuredFirstName}
                                    ref={register({
                                        required: "First name is required",})}
                                    className={
                                        errors["insuredFirstName" + id]
                                            ? "form-control is-invalid"
                                            : "form-control"
                                    }
                                />
                            </div>
                        </div>
                    </div>
                    <div className="col-md-6 py-3">
                        <div className="row">
                            <div className="form-group col-sm-6">
                                <label>Type of ID&nbsp;</label>
                                <select
                                    name={`insuredIdType${id}`}
                                    {...insuredIdType}
                                    ref={register({
                                        required: "ID is required",})}
                                    className={
                                        errors["insuredIdType" + id]
                                            ? "form-control is-invalid"
                                            : "form-control"
                                    }
                                >
                                    {listIdType}
                                </select>
                            </div>
                            <div className="form-group col-sm-6">
                                <label>ID Number&nbsp;</label>
                                <input
                                    type="text"
                                    name={`insuredIdNumber${id}`}
                                    placeholder="ID Number"
                                    {...insuredIdNumber}
                                    ref={register({
                                        required: "ID number is required",})}
                                    className={
                                        errors["insuredIdNumber" + id]
                                            ? "form-control is-invalid"
                                            : "form-control"
                                    }
                                />
                            </div>
                        </div>
                    </div>
                </div>
            </form>
        );
        return newDiv;
    }

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。