javascript - 将函数转换为动态 selectBoxes,它可以工作一次、两次或从不工作。反应
问题描述
我有一个带有动态选择框的表单。根据第一个结果,我调用一个函数,其结果将进入第二个 selectBox。
我找到了解决方案:
显然 onClick 不适用于选项标签,所以我将我的功能放在选择标签的 onChange 中。或者我使用 useEffect 在变量更改时调用该函数。
上述这些解决方案有效,但我的问题是它工作一次,有时两次但不会更多。我必须重新加载页面,但它不适用于所有这些。
如果有人想深入研究我的代码并告诉我为什么它每次都不起作用。
谢谢你。
变量 componentOriginName、componentTargetName 和函数 getComponentOriginNames、getComponentTargetNames 来自 redux。
const [relationType, setRelationType] = useState({
type: props.type,
});
const [newRelation, setNewRelation] = useState({
componentOriginType: "",
componentOriginName: "",
componentTargetType: "",
componentTargetName: "",
data: "",
});
表格 :
<div className='container--info--tuple'>
<div className='group--input'>
<select
name='componentOriginType'
onChange={handleChange}
value={newRelation.componentOriginType}
required>
<option value=''></option>
{props.components &&
props.components.map((component, i) => {
return (
<option key={i} value={component.name}>
{component.name}
</option>
);
})}
</select>
<span className='floating--label--select required'>
Composant origine
</span>
</div>
<div className='group--input'>
<select
name='componentOriginName'
onChange={handleChange}
value={newRelation.componentOriginName}
required>
<option value=''></option>
{props.componentOriginName &&
props.componentOriginName.map((component, i) => {
return (
<option key={i} value={component.name}>
{component.name}
</option>
);
})}
</select>
<span className='floating--label--select required'>
Nom du composant d'origine
</span>
</div>
</div>
<div className='container--info--tuple'>
<div className='group--input'>
<select
name='type'
onChange={handleChangeType}
value={relationType.type}
required>
<option value=''></option>
{props.relations.map((relation, i) => {
return (
<option key={i} value={relation.name}>
{relation.name}
</option>
);
})}
</select>
<span className='floating--label--select required'>Relation</span>
</div>
</div>
<div className='container--info--tuple'>
<div className='group--input'>
<select
name='componentTargetType'
onChange={handleChange}
value={newRelation.componentTargetType}
required>
<option value=''></option>
{props.components &&
props.components.map((component, i) => {
return (
<option key={i} value={component.name}>
{component.name}
</option>
);
})}
</select>
<span className='floating--label--select required'>
Composant cible
</span>
</div>
<div className='group--input'>
<select
name='componentTargetName'
onChange={handleChange}
value={newRelation.componentTargetName}
required>
<option value=''></option>
{props.componentTargetName &&
props.componentTargetName.map((component, i) => {
return (
<option key={i} value={component.name}>
{component.name}
</option>
);
})}
</select>
<span className='floating--label--select required'>
Nom du composant cible
</span>
</div>
</div>
和我的不同测试的功能评论:
const handleChange = (event) => {
setNewRelation({
...newRelation,
[event.target.name]: event.target.value,
});
if (event.target.name === "componentOriginType") {
propsGetComponentOriginNames(event.target.value);
} else if (event.target.name === "componentTargetType") {
propsGetComponentTargetNames(event.target.value);
}
};
// =======================================================================
// const test = (type) => {
// props.getComponentOriginNames(type);
// };
// const handleChangeOrigin = (event) => {
// test(event.target.value);
// setNewRelation({
// ...newRelation,
// [event.target.name]: event.target.value,
// });
// };
// const handleChangeTarget = (event) => {
// props.getComponentTargetNames(event.target.value);
// setNewRelation({
// ...newRelation,
// [event.target.name]: event.target.value,
// });
// };
// =======================================================================
const propsGetComponentOriginNames = props.getComponentOriginNames;
const propsGetComponentTargetNames = props.getComponentTargetNames;
// useEffect(() => {
// propsGetComponentOriginNames(newRelation.componentOriginType);
// }, [
// propsGetComponentOriginNames,
// newRelation.componentOriginType,
// relationType.type,
// ]);
// useEffect(() => {
// propsGetComponentTargetNames(newRelation.componentTargetType);
// }, [
// newRelation.componentTargetType,
// propsGetComponentTargetNames,
// relationType.type,
// ]);
// =======================================================================
解决方案
推荐阅读
- ios - UIview 起始中心看似不正确。(虚假视觉)
- spring - 使用 Spring Cloud 合约处理路由功能(reactive-webflux)
- c# - 我们如何在 iTextSharp 中编写 Unicode 印地语文本?
- html - 创建自定义 CSS 以覆盖默认 CSS
- sockets - 不能再在 XCode 中进行网络编程了
- kerberos - 带有 Kerberos 的 WSO2 IWA – 无法解密 kerberos 令牌异常
- javascript - 如何使用 java 脚本访问此字典中的字段 1 值?
- python - Pandas 中的子字符串元素
- java - android - 当应用程序未运行时通过 Intent 从通知中获取数据
- apache-spark - 如何将日志从纱线容器转发到 s3?