【发布时间】:2020-02-06 22:49:49
【问题描述】:
我有一个包含 4 个输入的表单,使用来自同一状态的数据。我想要的是,在选择之后,选择选项将从另外 3 个选择中删除。
我尝试了很多东西,在这里很难列出,但简而言之:我创建另一个选定选项列表,用另一个列表过滤玩家数组,映射这个等等。
这种方法的问题是:我不想从选择它的输入中删除选定的项目。所以,我尝试为每个输入创建相同原始列表的副本。但是,我认为这种方式“变通”太多了。
这是我的组件:
import React, { Component } from 'react';
export default class MatchPlayerSelect extends Component {
state = {
selectedPlayers: [],
players: [
{
name:"edmiel",
matches:0,
wins:0
},
{
name:"willian",
matches:0,
wins:0
},
{
name:"gustavo",
matches:0,
wins:0
},
{
name:"gabriel",
matches:0,
wins:0
}
]
}
render() {
const {players, selectedPlayers} = this.state;
return (
<div className="match-player">
<select onChange={this.setPlayer.bind(this)}>
<option defaultValue value="">-</option>
{
// i need to filter list here
// but this code only list the items on state
players.map((player, index) => {
return(
<option key={index} value={player}>
{player.name}
</option>
)
})
}
</select>
</div>
);
}
setPlayer(sender) {
this.setState({ selectedPlayer: [...this.state.selectedPlayers,
sender.target.value] });
}
}
我需要所有选择组件渲染每个状态播放器(已经在上面的代码中这样做了)。但是,在选中时,我需要从另一个输入中删除此选项选项,而不会从焦点选择输入中删除。如果在 React 中存在更好的解决方案,请告诉我如何操作。
我需要使用 react jsx 工具或 vanilla js 来执行此操作。没有jquery! 就是这样。
【问题讨论】:
-
我不明白要做什么,在选择球员时会发生什么?该选项应该消失吗?请编辑您的问题并显示所需的行为。
-
我上面的问题描述的很好,不知道怎么解释更好:(
-
你可以只通过 selectedPlayers 过滤玩家,阅读 #filter 和 #includes
-
我想澄清一下,虽然我评论了几次,但您需要制作一个可生产的示例,向我们展示您的表单与多个选择器,向我们展示您为解决问题所做的一些努力并简要说明您的示例所需的输入和输出以及哪些不起作用,这就是 SO 的工作原理,干杯。
标签: javascript arrays reactjs drop-down-menu state