【问题标题】:How to show nested elements using react如何使用反应显示嵌套元素
【发布时间】:2020-10-28 09:12:11
【问题描述】:

我正在创建动态元素,当用户单击 add 时,我正在创建另一组元素。

创建元素后,我有一个选择选项,因此在选择特定选项时,我将再创建一个字段。

我有first nameselect age 两个元素,我的年龄分别为>18<=18 所以在此基础上我再创建一个字段。

在这里,当我创建另一个字段时,我遇到了问题。

我在做什么

  • 我正在循环我的元素

  • 然后对于我将在选择时创建的新元素,我将进行条件渲染

    {onChangeAge && indexVal === index && (

所以我正在做的是,如果onchange选择我正在检查值> 18然后将状态设置为该值并显示新的输入字段,
  • 但它没有按预期工作,当我在第一组元素中选择 >18 并在第二组中选择 <=18 时,它再次设置为 false。
  • 那是因为indexVal === index 我不知道如何处理

问题

问题是当我选择年龄<=18 时,我正在显示一个输入字段,我又创建了一个element set,如果我再次选择<=18,那么我在第一个组件中创建的输入字段没有出现。

This is my code sandbox link在我的代码沙箱中我有工作代码,请检查

【问题讨论】:

  • select 元素的onChange 处理程序中,您不会更新该输入的年龄。这是您需要在代码中进行的几处更改以解决问题的demo

标签: javascript reactjs react-hooks


【解决方案1】:

我建议要么通过更新现有的inputHolder 来跟踪年龄输入,要么通过单独的状态进行跟踪。应该是这样的:

更新onChange年龄

const onChangeAge = (e, ind) => {
    console.log(e.target.value);
    let val = e.target.value;
    console.log(typeof ind, ind, typeof val);
    let inputHolderCopy = [...inputHolder];
    setindexVal(ind);
    inputHolderCopy = inputHolderCopy.map((data) => {
      if (data.id === ind + 1) {
        return { ...data, currentSelectedAge: val };
      }
      return data;
    });
    setinputHolder(inputHolderCopy);

    if (val === "<=18 ") {
      console.log("Hello");
      setageVal(true);
    } else {
      setageVal(false);
    }
  }

现在只需检查这里:

{onChangeAge && li.currentSelectedAge === "<=18" && (
              <div>
                <input
                  type="text"
                  name={`data[${index}].idCred`}
                  id="idCred"
                  placeholder="ID"
                  ref={register({ required: "ID is required" })}
                />

                <br></br>
                <label htmlFor="idCred">Name</label>
              </div>
            )}

这里是演示:https://codesandbox.io/s/proud-river-5bg7o?file=/src/App.js:2093-2527

注意:这只是一种方法。你也可以用其他方式。就像在inputHolder 中创建变量并跟踪它的值。

【讨论】:

  • 嘿,在你的情况下,我已经尝试过它工作正常,但是如果我选择其他东西怎么办,我怎样才能从状态中删除它
  • 你的意思是如果你选择不同的年龄输入应该删除?
  • 我已经更新了我的代码。看起来它更好地跟踪它的每个对象。检查沙盒
猜你喜欢
  • 2020-10-06
  • 2020-11-13
  • 2019-07-18
  • 2021-02-28
  • 2020-02-19
  • 2017-04-03
  • 2013-10-27
  • 2023-01-28
  • 1970-01-01
相关资源
最近更新 更多