如何在react-select中设置默认值

use*_*203 40 default-value reactjs react-select

我有一个使用react-select的问题.我使用redux形式,我已经使我的react-select组件与redux形式兼容.这是代码:

const MySelect = props => (
    <Select
        {...props}
        value={props.input.value}
        onChange={value => props.input.onChange(value)}
        onBlur={() => props.input.onBlur(props.input.value)}
        options={props.options}
        placeholder={props.placeholder}
        selectedValue={props.selectedValue}
      />
    );
Run Code Online (Sandbox Code Playgroud)

在这里我如何渲染它:

<div className="select-box__container">
                  <Field
                    id="side"
                    name="side"
                    component={SelectInput}
                    options={sideOptions}
                    clearable={false}
                    placeholder="Select Side"
                    selectedValue={label: 'Any', value: 'Any'}
                  />
                </div>
Run Code Online (Sandbox Code Playgroud)

但问题是,我的下拉列表没有我想要的默认值.我做错了什么?有任何想法吗?

Ved*_*Ved 33

我想你需要这样的东西:

const MySelect = props => (
<Select
    {...props}
    value={props.options.filter(option => option.label === 'Some label')}
    onChange={value => props.input.onChange(value)}
    onBlur={() => props.input.onBlur(props.input.value)}
    options={props.options}
    placeholder={props.placeholder}
  />
);
Run Code Online (Sandbox Code Playgroud)

  • `selectedValue`已被改为`value`.检查文档https://react-select.com/props (4认同)
  • 新版本中现在有一个“ defaultValue”字段。 (4认同)
  • 棘手的是您需要将所选对象设置为“defaultValue”字段,而不是选项的值。例如0,1,2 (4认同)
  • 与redux / react绑定的重点是ui可以实时反映对象的值。这种方法解除了这种约束。考虑在减速器中设置默认值。 (2认同)
  • @JosephJuhnke 首先检查问题。这是如何设置默认值。 (2认同)

小智 25

我使用了defaultValue参数,下面是我如何获得默认值以及从下拉列表中选择选项时更新默认值的代码.

<Select
  name="form-dept-select"
  options={depts}
  defaultValue={{ label: "Select Dept", value: 0 }}
  onChange={e => {
              this.setState({
              department: e.label,
              deptId: e.value
              });
           }}
/>
Run Code Online (Sandbox Code Playgroud)

  • 谢谢,现在我知道defaultValue接受对象而不只是值。 (5认同)
  • @Alex - (对于两年后这里的任何人来说),这个问题是关于react-select,一个组件库。您链接到的文档引用了本机 HTML 选择元素。 (4认同)
  • 不根据 React 文档或 intelisense ,它不会:https://reactjs.org/docs/uncontrol-components.html#default-values (2认同)

eed*_*rah 19

如果你来这里是为了反应选V2,以及仍然存在问题-第2版现在只接受一个对象作为value,defaultValue等等.

也就是说,尝试使用value={{value: 'one', label: 'One'}},而不仅仅是value={'one'}.

  • 不完整。如果您将值设置为该值,则无法再更改该值 (2认同)

小智 9

我遇到了类似的错误.确保您的选项具有值属性.

<option key={index} value={item}> {item} </option>
Run Code Online (Sandbox Code Playgroud)

然后将selection元素值最初匹配到options值.

<select 
    value={this.value} />
Run Code Online (Sandbox Code Playgroud)

  • 这是针对普通 HTML &lt;select&gt; 元素,而不是反应选择 &lt;Select&gt;,这正是问题所在。外壳可以让一切变得不同:) (3认同)

Das*_*ara 8

使用 defaultInputValue 属性,如下所示:

<Select
   name="name"
   isClearable
   onChange={handleChanges}
   options={colourOptions}
   isSearchable="true"
   placeholder="Brand Name"
   defaultInputValue="defaultInputValue"
/>

          
Run Code Online (Sandbox Code Playgroud)

更多参考https://www.npmjs.com/package/react-select


Dan*_*igs 7

扩展@isaac-pak 的回答,如果您想将默认值传递给 prop 中的组件,您可以将其保存在 componentDidMount() 生命周期方法中的 state 中,以确保第一次选择默认值。

请注意,我已更新以下代码以使其更完整,并使用空字符串作为每个注释的初始值。

export default class MySelect extends Component {

    constructor(props) {
        super(props);
        this.state = {
            selectedValue: '',
        };
        this.handleChange = this.handleChange.bind(this);

        this.options = [
            {value: 'foo', label: 'Foo'},
            {value: 'bar', label: 'Bar'},
            {value: 'baz', label: 'Baz'}
        ];

    }

    componentDidMount() {
        this.setState({
            selectedValue: this.props.defaultValue,
        })
    }

    handleChange(selectedOption) {
        this.setState({selectedValue: selectedOption.target.value});
    }

    render() {
        return (
            <Select
                value={this.options.filter(({value}) => value === this.state.selectedValue)}
                onChange={this.handleChange}
                options={this.options}
            />
        )
    }
}

MySelect.propTypes = {
    defaultValue: PropTypes.string.isRequired
};
Run Code Online (Sandbox Code Playgroud)


Sha*_*jib 5

当我遵循上面所有的答案时,我想到,我应该写这个。

您必须设置 prop value,而不是DefaultValue。我花了几个小时使用它,阅读文档,他们提到使用 DefaultValue,但它不起作用。正确的方法是,

options=[{label:'mylabel1',value:1},{label:'mylabel2',value:2}]
seleted_option={label:'mylabel1',value:1}

<Select
options={options}
value={selected_option}/>
Run Code Online (Sandbox Code Playgroud)