作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
你能告诉我如何在 react 中动态添加项目吗?
我正在从服务器获取响应(名称、标签等)。例如,我只是模拟我的响应,两秒后我获取该响应。
在我的示例中,我有两个选择框或下拉菜单。第一个下拉菜单的值为“one”和“two”(在 json 中作为选项给出)。
在 json 中还有一个选项 dependentField
这意味着该字段依赖于另一个字段(提到的值是依赖的)。在我的示例中,second
字段依赖于第一个字段字段。
因此,如果第一个选择框或下拉列表值 ID one
,则第二个选择或下拉字段的值将为 ["三", "四"]
。
因此,如果第一个选择框或下拉列表值 ID two
,则第二个选择或下拉字段的值将为 ["four", "six"]
。
所以我需要观察
字段的值,如 Hook 表单
中提到的
https://react-hook-form.com/get-started
我们可以动态添加选项
这是代码
https://codesandbox.io/s/stoic-benz-lxb8i
useEffect(() => {
console.log("====");
(async () => {
var a = await FETCH_API();
console.log("sssss");
setState(a);
console.log(a);
})();
}, []);
const getForm = () => {
try {
return state.map((i, index) => {
switch (i.type) {
case "text":
return (
<div key={index}>
<label>{i.label}</label>
<input type="text" ref={register()} name={i.name} />
</div>
);
case "select":
if (i.watch) {
watch(i.name, null);
}
return (
<div key={index}>
<label>{i.label}</label>
<select name={i.name} ref={register()}>
{i.options.map((i, idx) => {
return (
<option key={idx} value={i}>
{i}
</option>
);
})}
/
</select>
</div>
);
default:
return <div>ddd</div>;
}
});
return <div>ddd</div>;
} catch (e) {}
};
我不想做任何类似的事情
useEffect(()=>{
},[‘first’])
我们可以动态观察或添加useeffect来动态观察变化吗?
任何更新
最佳答案
这是一个简单的两个选择。第一个选择取决于第二个
import React,{useState, useEffect} from "react"
const App = () => {
const [state,setState] = useState({
option1:["one","two"],
option2: []
})
useEffect(()=> {
(async () => {
var a = await FETCH_API();
console.log("sssss");
setState({
...state,
option2: a
});
console.log(a);
})();
},[state.option1])
return(
<div>
<select>
{
state.option1.map((i,idx)=>{
return(
<option key={idx} value={i}>
{i}
</option>
)
})
}
</select>
<select>
{
state.option2.map((i,idx)=>{
return(
<option key={idx} value={i}>
{i}
</option>
)
})
}
</select>
</div>
)
}
export default App
关于javascript - 如何在 react 中动态添加项目?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60261781/
我是一名优秀的程序员,十分优秀!