如果我在反应中更改一个输入,所有值字段都将更改为相同的值

Posted

技术标签:

【中文标题】如果我在反应中更改一个输入,所有值字段都将更改为相同的值【英文标题】:All value fields are changing to the same value if I change one input in react 【发布时间】:2022-01-21 21:31:51 【问题描述】:

这是我的代码:


    lining.hitprescription ?
    <div className="prescription-form">
        
            medicine.map((item, index) => 
                return <>
                    <div className="form-items" key=index>
                        <label htmlFor="name">Medicine index + 1:</label>
                        <input className="prescription-input"...formik.getFieldProps("medicine")></input>
                    </div>
                </>
             )
         
         <div className="form-items" onClick=addMoreMedicine>
             <label htmlFor="addmore" style= color: "blue" >Add More <Add></Add></label>
         </div>
    </div>: null

在 react JSX 中,我正在映射输入表单字段,其中医学被初始化为

const [medicine, setmedicine] = useState(["", ""])

我正在使用 formik,其中值被初始化为

const formik = useFormik(
    initialValues: 
        basicInfo: '',
        labTestId: [],
        appointmentId: null,
        medicine: ""
    ,
    validate: values => 
        let errors = 
        if (!values.basicInfo) 
            errors.basicInfo = "Required!"
        
        return errors
    
)

我遇到的问题是,如果我更改了一个输入字段,那么在更改字段期间,其他输入字段中会显示相同的值,如何解决这个问题?

【问题讨论】:

你有多少个输入?我在您的代码中只看到一个输入请指定 @AhmedHosny 都指定正确。你可以在 JSX medicine.map 中看到 const [medicine, setmedicine] = useState(["", ""]) 数组有 2 个空字符串。结论:2 个输入 【参考方案1】:

这种行为是因为您为每个输入设置了 medicine 类型的状态 array。什么时候 您映射药物数组,您必须通过index 为每个输入设置状态。示例:

...formik.getFieldProps("medicine")[index]

codesandbox

【讨论】:

以上是关于如果我在反应中更改一个输入,所有值字段都将更改为相同的值的主要内容,如果未能解决你的问题,请参考以下文章

为啥动态更改值时光标会移动到输入字段的开头?

使用复选框交换div中所有内容的位置

反应数组的对象更改顺序的更改值

如何在颤动中选择基于下拉项添加文本字段值

如何通过每个数组值更改多个元素?

在不同组件中更改值时将设置值反应到另一个组件