reactjs 如何使用React JS中的表单组标签钻取二维数组对象并动态填充下拉列表?

yrdbyhpb  于 2022-12-18  发布在  React
关注(0)|答案(1)|浏览(149)
<Form.Group controlId="phoneName">
  <Form.Label>Phone Names</Form.Label>
  <Form.Control
    as="select"
    name="phoneName"
    value={values.phoneName}
    onChange={handleChange}
    isInvalid={!!errors.phoneName && !!touched.phoneName}
  >
    {phones.map((item, index) => {
      return (
        <div key={index}>
          {item.phoneName.map((phone, index) => {
            return <option key={index}>{phone.name}</option>;
          })}{" "}
        </div>
      );
    })}
  </Form.Control>
  <Form.Control.Feedback type="invalid">
    {" "}
    {errors.phoneName}{" "}
  </Form.Control.Feedback>
</Form.Group>;

输出打印标签,下拉列表为空,但可以在inspect--〉elements--〉中看到结果,在html中,我选择了下拉列表并看到了结果,值来自GitHub另一个分支中的JSON,因此我使用API调用获取数据,它工作正常,所以我首先使用下拉菜单来获得项目电话,之后我想从名为phoneName的下拉菜单中选择以获得像Nokia这样的选项,三星等,但只有标签的东西不打印正确的值在表单控件

[
  {
    gadgets: "phone",
    phoneName: [
      { name: "nokia", phoneColor: "blue", memory: "enough" },
      { name: "samsung", phoneColor: "black", memory: "little" },
    ],
  },
  {
    gadgets: "ipad",
    phoneName: [
      { name: "apple", phoneColor: "white", memory: "high" },
      { name: "samsung-g", phoneColor: "black", memory: "low" },
    ],
  },
];
piztneat

piztneat1#

我不确定你在表单中使用的是什么库,也没有明确的例子来说明你想实现什么,但是下面的例子可能会给你一个正确的方向。
首先,您尝试在选择列表中呈现一个div。Select列表通常使用options。我再次不确定您使用的库,因此无法做出准确的假设
其次,你的代码中有一个错误,我已经通过编辑你的帖子修复了这个错误。在第2行你输入了<Form.Label>Phone Names</<Form.Label>。结束标记不正确
我个人的看法是,您的数据没有以最优化的方式进行标记。我会将phoneName更改为gadgetList,因为数组包含与gadget属性关联的所有小工具
为了达到我认为你想要达到的效果,你可以尝试以下方法:

{data.map((item,index) => {
        return (
          <div key={item + index}>
            <h4>{item.gadgets}</h4>
            <select>
              {item.phoneName.map((gadget) => (
                <option>{gadget.name}</option>
              ))}
            </select>
          </div>
        );
      })}

这实际上将用2 select listsMap出2 divs。选择选项将是电话名称。
下面是一个例子:https://codesandbox.io/s/silly-maxwell-tylpwd?file=/src/App.js
希望这能对你有所帮助。如果没有,请把你的代码放入沙箱,这样我们就能帮助你更好地解决问题:)

相关问题