【问题标题】:how display text only inside the related input field?如何仅在相关输入字段内显示文本?
【发布时间】:2021-03-07 09:08:19
【问题描述】:

当用户选中该输入框的复选框时,我的输入框将被启用。然后我想在那个特定的输入框中输入,但是当我在一个特定的输入框中时,我的文本会显示在所有输入中。

import React, { useState } from "react";
//some imports related to checkbox

export default function componentA() {
  //input
  const [value, setValue] = useState("");
 

  //checkbox group
  const [checkedOptions, setCheckedOptions] = useState({});

  const onOSelect = (event) => {
  
    const item = event.target.name;
    const isChecked = event.target.checked;
   

    setCheckedOptions({
      ...checkedOptions,
      [item]: isChecked,
    });
  };

  //data
  const data = [
    { label: "Rock", name: "Rock" },
    { label: "rambo", name: "rambo" },
    { label: "phone", name: "phone" },
    ]

  const handleChange = (event) => {
    setValue(event.target.value);
  };

  return (
    <div >
      <div>
        <Card>
          <Checkbox
            checkedOptions={checkedOptions}
            groupLabel="Checkbox group label"
            onChange={onOSelect}
            options={data}
          />
        </Card>
      </div>
      <Card >
        <div >
          {data.map((item, key) => (
            <div key={key.name} >
              <input
                label={item.name}
                name={item.name}
                onChange={handleChange}
                placeholder="Placeholder"
                isDisabled={!checkedOptions[item.name]}
                value={value}
              />
            </div>
          ))}
        </div>
      </Card>
    </div>
  );
}

寻找解决方案,如何仅在相关输入字段中显示我输入的文本并在特定状态下获取该值。

【问题讨论】:

  • 您需要将值状态转换为map,并将相关的片段传递到每个输入中。
  • 您应该包括电子邮件、电话和您所在州的邮件。在您的 handleChange 函数中,使用 event.target.name 查找已更新的 TextBox,并相应地更新您的状态。

标签: javascript reactjs checkbox ecmascript-6


【解决方案1】:

您需要保存每个字段的状态,这样才能工作

const [value, setValue] = useState({});
   ....

 const handleChange = (event, fieldName) => {
    setValue(oldState => ({ ...oldState, [fieldName]: event.target.value}));
  };   
   ....
 
 <Input
  isRequired
  label={item.name}
  minLength={4}
  name={item.name}
  onChange={(e, item.name) => handleChange(e, item.name)}
  value={value[item.name]}
  ....
  />

不要忘记通过名称将输入指向对象中的值,感谢@andymccullough 指出

【讨论】:

  • 你错过了 value 属性的重要部分
  • @majidbeg 我已经更新了handleChange函数,缺少学徒,复制它现在试试
  • @majidbeg 添加工作sandbox
猜你喜欢
  • 1970-01-01
  • 2021-02-25
  • 1970-01-01
  • 1970-01-01
  • 2016-01-08
  • 1970-01-01
  • 2020-07-05
  • 1970-01-01
  • 2011-10-06
相关资源
最近更新 更多