javascript - 如何使用反应显示嵌套元素
问题描述
我正在创建动态元素,当用户单击时,add
我正在创建另一组元素。
一旦我创建了元素,我就在那里有一个选择选项,所以在选择特定选项时,我将再创建一个字段。
我有first name
两个select age
元素,我有年龄>18
,<=18
所以在此基础上我再创造一个领域。
在这里,当我再创建一个字段时,我遇到了问题。
我在做什么
我正在循环我的元素
然后对于我将在选择时创建的新元素,我正在进行条件渲染
{onChangeAge && indexVal === 索引 && (
所以我正在做的是当 onChange of select 我检查值是否> 18然后将状态设置为该值并显示新的输入字段,
- 但它没有按预期工作,当我
>18
在第一组元素中选择并<=18
在第二组中选择时,它再次设置为 false。 - 那是因为
indexVal === index
我不知道如何处理
问题
问题是当我选择年龄时<=18
,我正在显示一个输入字段,我又创建了一个element set
,如果我再次选择,<=18
那么我在第一个组件中创建的输入字段不会显示。
这是我的代码沙箱链接 在我的代码沙箱中我有工作代码,请检查
解决方案
我建议通过更新现有的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
并跟踪其值一样。
推荐阅读
- django - Django如何在信号中保存对象状态?
- ruby - Prepending dash on a Ruby string doesn't freeze the string object?
- docker - Error: ENOENT: no such file or directory, scandir during docker-compose up
- ansible - 在 jinja2 循环中使用主机变量的动态变量
- azure-devops - Terraform ip configuration not found error
- reactjs - How to use a select with options instead two buttons for onClick event ReactJS
- git - Tell git that modified line is not new line
- javascript - How to prevent a post request from changing a variable in the database
- servicestack - 使用表别名和类型化查询选择多个
- java - JavaFX中如何让Canvas填满BorderPane的中心?