【问题标题】:How to deselect option on selecting option of another select in react如何在选择反应中选择另一个选择的选项时取消选择选项
【发布时间】:2018-06-29 16:18:42
【问题描述】:

我有一个像这样的 Antd React 组件:

class MyApp extends React.Component{
  constructor(props) {
    super(props);
    this.state = {
      select1="",
      select2="",
    }
  }
  deselectSelect(e){
    this.setState({ select1: e.target.value });
    this.setState({ select2: "" }); 
  }
  render() {
    return(
      <div>
        <Select
          placeholder="select first val"
          onChange={this.deselectSelect}
          value={this.state.select1} />
        <Select
          placeholder="select 2nd val"
          value={this.state.select2} />
      </div>
    )
  }
}

我想要的是,当您从第一个选项中选择时,您应该取消选择选择 2 中存在的任何值。在我的代码中,我可以取消选择第二个选择的值,但占位符没有回来,这最初是在页面加载。我认为 Antd(我在 react 中用于样式化组件的库)在第二次选择中将值设置为空字符串,而不是取消选择当前值。

【问题讨论】:

  • 什么是Select?哪个图书馆?
  • antd 是一个类似 react-bootstrap 的 react 库

标签: html reactjs ecmascript-6 antd


【解决方案1】:

我之前没有使用过antd API,但我认为这应该可以:

您可能需要模糊选择以显示占位符。这是我会尝试的:

class MyApp extends React.Component{
  constructor(props) {
    super(props);
    this.state = {
      select1: "",
      select2: "",
    }
  }
  deselectSelect(e){
    this.setState({
      select1: e.target.value,
      select2: ""
    ), () => {
      this.sel2Ref.blur();  //runs **after** the above setState has finished
    }};
  }
  render() {
    return(
      <div>
        <Select
          placeholder="select first val"
          onChange={this.deselectSelect}
          value={this.state.select1} />
        <Select
          ref={(el) => this.sel2Ref = el}  //add a reference for DOM stuff later
          placeholder="select 2nd val"
          value={this.state.select2} />
      </div>
    )
  }
}

我在您的第二次选择中添加了一个ref 道具,以便我以后可以做 DOM 的事情。当我们执行deselectSelect() 时,我们使用setState() 的回调函数新状态更新后运行(在这种情况下,选择重置为"")在第二次选择时blur()。这应该会使占位符再次出现。

您的代码中存在一些问题:

  1. 您错误地初始化了状态。使用select1: "" 而不是select1= ""
  2. 这本身不是问题(因为批处理),但您不需要调用setState() 两次。只需调用它一个并将两个变量都设置在那里,而不是一次一个。

【讨论】:

  • 我不知道在 DOM 中添加什么。我得到那个 el 没有定义。 Obviouls 因为我没有定义它,但我也无法理解你的 ref 语法,因为我是新来的 react 和 es6。你能通过扩展你的代码和解释来帮助我吗?
  • P.S.它的 select1="" 在我的真实代码中。这里我打错了
  • @DadyByte 我也做了一个。错过了一个>。再试一次
  • 看,我可以将空字符串('')设置为选择的值。你的代码也在做同样的事情。多亏了你,我现在知道我必须在 onBlur 中添加一些东西,这将在设置状态后发生。但即使使用您的代码,我也不知道如何取消选择与将空字符串设置为值分开的选定值。
【解决方案2】:

deselectSelect 上将select2: "" 更改为select2: undefined

【讨论】:

    猜你喜欢
    • 2020-12-28
    • 1970-01-01
    • 2016-11-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-02
    相关资源
    最近更新 更多