如何使用一个键将相同的方法多次应用于不同的数组元素?
How to apply the same method multiple times to different array elements using a key?
我正在使用 React 中的卡片库。
每张卡片都需要有自己独特的状态和切换方法,目前由函数末尾的数字指定,例如onDropdownToggle1
.
使用this.state.cards.map((product, key) => ( ...
应用数组。
有没有办法使用函数名称中的键来明确地调用每个函数?比如直接修改函数名onDropdownToggle + {key}
?还是以某种方式将密钥作为参数更好?
这是我沙箱的 link,它准确显示了正在发生的事情:https://codesandbox.io/s/weathered-worker-0y5vm
如有任何建议,我们将不胜感激。谢谢!
只需将密钥作为参数传递即可。要么像这样内联:
onToggle={(isDropdownOpen) => this.onDropdownToggle(key, isDropdownOpen)}
或者你可以像这样咖喱:
this.onDropdownToggle = key => isDropdownOpen => {
...
}
...
onToggle={this.onDropdownToggle(key)}
然后您可以使用单个处理程序来修改每张卡片。
设置状态
时,您必须使用计算的属性名称
this.setState({
[key]: isDropdownOpen
});
最终结果:
// One toggle function that uses the key to update state
this.onDropdownToggle = (key, isDropdownOpen) => {
this.setState({
[key]: isDropdownOpen
});
};
// One dropdown select function that uses the key to update state
this.onDropdownSelect = (key, event) => {
this.setState({
[key]: !this.state[key]
});
};
...
<Dropdown
isPlain
position="right"
onSelect={(e) => this.onDropdownSelect(key,e)}
toggle={
<KebabToggle
onToggle={(isDropdownOpen) => this.onDropdownToggle(key, isDropdownOpen)} />}
isOpen={this.state[key]}
dropdownItems={kebabDropdownItems}
/>
您也可以考虑使用 item.name
而不是传递给函数的键。但前提是它们始终是唯一的。
我正在使用 React 中的卡片库。
每张卡片都需要有自己独特的状态和切换方法,目前由函数末尾的数字指定,例如onDropdownToggle1
.
使用this.state.cards.map((product, key) => ( ...
应用数组。
有没有办法使用函数名称中的键来明确地调用每个函数?比如直接修改函数名onDropdownToggle + {key}
?还是以某种方式将密钥作为参数更好?
这是我沙箱的 link,它准确显示了正在发生的事情:https://codesandbox.io/s/weathered-worker-0y5vm
如有任何建议,我们将不胜感激。谢谢!
只需将密钥作为参数传递即可。要么像这样内联:
onToggle={(isDropdownOpen) => this.onDropdownToggle(key, isDropdownOpen)}
或者你可以像这样咖喱:
this.onDropdownToggle = key => isDropdownOpen => {
...
}
...
onToggle={this.onDropdownToggle(key)}
然后您可以使用单个处理程序来修改每张卡片。
设置状态
时,您必须使用计算的属性名称this.setState({
[key]: isDropdownOpen
});
最终结果:
// One toggle function that uses the key to update state
this.onDropdownToggle = (key, isDropdownOpen) => {
this.setState({
[key]: isDropdownOpen
});
};
// One dropdown select function that uses the key to update state
this.onDropdownSelect = (key, event) => {
this.setState({
[key]: !this.state[key]
});
};
...
<Dropdown
isPlain
position="right"
onSelect={(e) => this.onDropdownSelect(key,e)}
toggle={
<KebabToggle
onToggle={(isDropdownOpen) => this.onDropdownToggle(key, isDropdownOpen)} />}
isOpen={this.state[key]}
dropdownItems={kebabDropdownItems}
/>
您也可以考虑使用 item.name
而不是传递给函数的键。但前提是它们始终是唯一的。