【问题标题】:react select not recognizing default value反应选择不识别默认值
【发布时间】:2019-01-16 04:36:18
【问题描述】:

我有一个无法识别默认值选项的反应选择组件。 代码如下所示:

renderPlans(){
        if(this.props.plans){
            let list =  this.props.plans.map(item=>{
                return ({label:item.description, value:item.id})
            });

            return(
                <Select
                    name= "tile-plans"
                    value= {this.state.selected}
                    classNamePrefix='react-select-container'
                    options={list}
                    defaultValue={list[0]}
                    onChange={(e) => { e ? this.setState({selected: e.value}) : this.setState({selected: ''}) }}
                />
            )
        }
    }

从我可以在其文档中找到的所有内容中,这是给它的格式。基本上我只是希望第一个选项始终是默认选择,因为有时只有一个选项,并且有人需要选择一个下拉列表没有意义。我还有一个正在加载的图表,因此如果选择了一个选项,该图表将不会加载。

这不是一个重复的问题,因为我知道您可以这样做: value= {this.state.selected ? this.state.selected:list[0].label} 但它不起作用。加载时输入保持空白。

【问题讨论】:

  • 这不是那个问题的重复。我不是想弄清楚如何将静态字符串放在值部分或占位符数据中。我需要初步选择第一选择。

标签: javascript reactjs react-select


【解决方案1】:

文档指出“如果您不提供这些道具,则可以设置它们控制的状态的初始值”,其中引用了您提供的 value 道具。

您可以在创建组件时将selected 设置为list 中的第一个元素。

示例

class App extends React.Component {
  state = {
    selected: this.props.list[0]
  };

  handleChange = selected => {
    this.setState({ selected });
  };

  render() {
    const { selected } = this.state;

    return (
      <Select
        value={selected}
        onChange={this.handleChange}
        options={this.props.list}
      />
    );
  }
}

ReactDOM.render(
  <App
    list={[
      { value: "chocolate", label: "Chocolate" },
      { value: "strawberry", label: "Strawberry" },
      { value: "vanilla", label: "Vanilla" }
    ]}
  />,
  document.getElementById("root")
);

【讨论】:

  • 认为你需要this.setState({selected: selectedOption });。演示不允许更改以其他方式显示
  • @charlietfl Ops,谢谢。我试图聪明地匹配变量名,但忘记了其中一个。
  • 我全心全意地理解为什么这应该有效,并且关于它的 mod 在沙盒中确实有效。但不是在实际代码中。我什至尝试了 value={"hi"} 的最小值,看看它是否会吐出来,我仍然会在加载时的选择中得到一个“Select...”占位符文本。
  • @KyleT 您能否创建一个CodeSandbox 来隔离您遇到的错误行为?这样会更容易为您提供帮助。
  • 在沙盒中玩弄了您的代码并能够弄清楚。谢谢 Tholle,你今天成了救命稻草。
猜你喜欢
  • 2017-09-02
  • 1970-01-01
  • 2018-05-06
  • 2023-01-09
  • 2021-09-27
  • 2020-05-19
  • 1970-01-01
  • 2018-12-19
  • 2018-05-02
相关资源
最近更新 更多