【发布时间】:2019-11-25 14:07:39
【问题描述】:
假设我有一个返回下拉列表的函数。该函数从某个父级调用,其中父级传入包括状态键、数组和 onChange 在内的道具。下拉列表是从数组中的项目动态创建的。 What I want to happen is, when an option in the dropdown is selected, the parents passed in state key gets updated to the value of whatever was selected.目前,我正在尝试通过设置一个 onClick 处理程序 per 来做到这一点,但这是行不通的。相反,我遇到了没有或未定义的值(下面将详细描述)。
示例流程:
- Parent 传入 aStateKey(实际状态键)、用作下拉值的数组以及用于更新 aStateKey 的 onChange 函数
- 下拉菜单是根据传入的数组创建的
- 选择了一个下拉项
- aStateKey(作为道具传入)通过传入的 onChange 函数进行更新。
我知道传统的方法是给和 onChange 处理程序,但我在解决如何获得上述期望时遇到了麻烦。
家长
state = { aStateKey: "" };
someArray = ["test", "another test"];
updateField = (name, value) => {
console.log("Updating field: " + name + " with value: " + value);
}
return(
<div>
<CreateDropdown name="aStateKey" items={this.someArray} onChange={this.updateField} />
</div>
);
CreateDropdown
function CreateDropdown(props) {
const handleClick = event => {
console.log("changed name:" + event.name + "changed value: " + event.value);
props.onChange(event.name, event.value);
};
return (
<div>
<select>
{props.items.map(field => (
<option key={field} value={field} name={props.name} onClick={handleClick}>
{field}
</option>
))}
</select>
</div>
);
}
控制台日志
什么都不显示!但是,如果我将 onClick 从<option> 移动到<select>,即
return (
<div>
<select onChange={handleClick}>
{props.items.map(field => (
<option key={field} value={field} name={props.name}>
{field}
</option>
))}
</select>
</div>
);
控制台显示:
更新字段:未定义值:未定义。
更改名称:未定义更改值:未定义
如何实现我想要的行为?
【问题讨论】:
-
OnChange event using React JS for drop down 的副本。请在发布问题之前进行更多研究。您需要将 value 道具传递给 select 元素。并且您需要在处理程序中访问该值。您还需要一个 onChange 选择
-
@JohnRuddell 我相信这个问题不是重复的,因为您链接的问题是关于 OnChange 侦听器的一般问题,我的问题更具体,甚至包括“正确”实施方式的代码这些听众在您链接的问题中陈述。
-
好吧,您没有正确设置您的听众/正确使用这些值。我会给出一个接受的其他问题的答案:)
-
@JohnRuddell Fair - 您链接的问题的答案也很有用。
标签: javascript reactjs