142

我在使用 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}
    />
);

以及我如何渲染它:

<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>

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

4

19 回答 19

110

我想你需要这样的东西:

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}
  />
);
于 2017-04-19T12:37:16.717 回答
92

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

<Select
  name="form-dept-select"
  options={depts}
  defaultValue={{ label: "Select Dept", value: 0 }}
  onChange={e => {
              this.setState({
              department: e.label,
              deptId: e.value
              });
           }}
/>
于 2018-08-03T05:49:02.050 回答
46

如果您来这里是为了 react-select v2,但仍然遇到问题 - 版本 2 现在只接受一个对象,如value,defaultValue等。

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

于 2018-09-06T18:00:22.573 回答
16

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

<option key={index} value={item}> {item} </option>

然后将选择元素值最初与选项值匹配。

<select 
    value={this.value} />
于 2017-07-07T04:45:59.730 回答
9

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

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

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
};
于 2018-11-15T00:15:23.707 回答
4

像这样使用 defaultInputValue 道具:

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

          

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

于 2020-06-04T07:01:02.833 回答
4

传递value对象:

<Select
                    isClearable={false}
                    options={[
                      {
                        label: 'Financials - Google',
                        options: [
                          { value: 'revenue1', label: 'Revenue' },
                          { value: 'sales1', label: 'Sales' },
                          { value: 'return1', label: 'Return' },
                        ],
                      },
                      {
                        label: 'Financials - Apple',
                        options: [
                          { value: 'revenue2', label: 'Revenue' },
                          { value: 'sales2', label: 'Sales' },
                          { value: 'return2', label: 'Return' },
                        ],
                      },
                      {
                        label: 'Financials - Microsoft',
                        options: [
                          { value: 'revenue3', label: 'Revenue' },
                          { value: 'sales3', label: 'Sales' },
                          { value: 'return3', label: 'Return' },
                        ],
                      },
                    ]}
                    className="react-select w-50"
                    classNamePrefix="select"
                    value={{ value: 'revenue1', label: 'Revenue' }}
                    isSearchable={false}
                    placeholder="Select A Matric"
                    onChange={onDropdownChange}
                  />

于 2021-04-16T12:06:57.650 回答
2

当我按照上面的所有答案进行操作时,我想到了,我应该写这个。

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

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

<Select
options={options}
value={selected_option}/>
于 2021-10-28T17:18:38.693 回答
2

如果您在选项中使用组,则需要进行深度搜索:

options={[
  { value: 'all', label: 'All' },
  {
    label: 'Specific',
    options: [
      { value: 'one', label: 'One' },
      { value: 'two', label: 'Two' },
      { value: 'three', label: 'Three' },
    ],
  },
]}
const deepSearch = (options, value, tempObj = {}) => {
  if (options && value != null) {
    options.find((node) => {
      if (node.value === value) {
        tempObj.found = node;
        return node;
      }
      return deepSearch(node.options, value, tempObj);
    });
    if (tempObj.found) {
      return tempObj.found;
    }
  }
  return undefined;
};
于 2020-11-02T09:42:42.493 回答
2

我自己刚刚经历了这个,并选择在减速器 INIT 函数中设置默认值。

如果您使用 redux 绑定您的选择,那么最好不要使用不代表实际值的选择默认值“解除绑定”它,而是在初始化对象时设置该值。

于 2017-08-03T21:37:26.173 回答
1

如果您没有使用 redux-form 并且您使用本地状态进行更改,那么您的 react-select 组件可能如下所示:

class MySelect extends Component {

constructor() {
    super()
}

state = {
     selectedValue: 'default' // your default value goes here
}

render() {
  <Select
       ...
       value={this.state.selectedValue}
       ...
  />
)}
于 2018-07-15T15:05:59.970 回答
1

几点:

  1. defaultValue适用于初始渲染,它不会在顺序渲染过程中更新。确保在您拥有defaultValue之后呈现您的 Select 。

  2. defaultValue应该以 Object 或 Array of Objects 的形式定义,如下所示:{value:'1', label:'Guest'},最防弹的方法是将其设置为选项列表项:myOptionsList[selectedIndex]

于 2021-08-06T12:59:53.120 回答
1

我经常使用这样的东西。

本例中 props 的默认值

if(Defaultvalue ===item.value) {
    return <option key={item.key} defaultValue value={item.value}>{plantel.value} </option>   
} else {
    return <option key={item.key} value={item.value}>{plantel.value} </option> 
}
于 2020-05-14T17:36:10.017 回答
1

使用 <select value={stateValue}>. 确保中的值在stateValue选择字段中给出的选项中。

于 2021-06-21T12:13:21.023 回答
0
  1. 在构造函数中为默认选项文本创建状态属性
    • 不用担心默认选项值
  2. 向渲染函数添加选项标签。只显示使用状态和三元表达式
  3. 创建一个函数以在选择选项时进行处理
  4. 将此事件处理函数中的默认选项值的状态更改为 null

    Class MySelect extends React.Component
    {
        constructor()
        {
            super()
            this.handleChange = this.handleChange.bind(this);
            this.state = {
                selectDefault: "Select An Option"
            }
        }
        handleChange(event)
        {
            const selectedValue = event.target.value;
            //do something with selectedValue
            this.setState({
                selectDefault: null
            });
        }
        render()
        {
            return (
            <select name="selectInput" id="selectInput" onChange={this.handleChange} value= 
                {this.selectedValue}>
             {this.state.selectDefault ? <option>{this.state.selectDefault}</option> : ''}
                {'map list or static list of options here'}
            </select>
            )
        }
    }
    
于 2020-02-02T01:30:48.857 回答
0

自动选择 in select 的值。

在此处输入图像描述

<div className="form-group">
    <label htmlFor="contactmethod">Contact Method</label>
    <select id="contactmethod" className="form-control"  value={this.state.contactmethod || ''} onChange={this.handleChange} name="contactmethod">
    <option value='Email'>URL</option>
    <option value='Phone'>Phone</option>
    <option value="SMS">SMS</option>
    </select>
</div>

在 select 标签中使用 value 属性

value={this.state.contactmethod || ''}

解决方案对我有用。

于 2019-06-17T07:01:41.493 回答
0

如果你的选择是这样的

var options = [
  { value: 'one', label: 'One' },
  { value: 'two', label: 'Two' }
];

{props.input.value}应该匹配'value'你的{props.options}

含义,props.input.value应该是'one'或者'two'

于 2017-10-20T06:37:27.643 回答
-1

在 react-select 中,如果你想为自定义标签定义,试试这个。

  <Select
    getOptionLabel={({ name }) => name}
  />
于 2021-06-24T13:04:37.963 回答
-2

你可以简单地这样做:

在 react-select 中,初始选项值

const optionsAB = [
  { value: '1', label: 'Football' },
  { value: '2', label: 'Cricket' },
  { value: '3', label: 'Tenis' }
];

仅提供 API:

apiData = [
  { games: '1', name: 'Football', City: 'Kolkata' },
  { games: '2', name: 'Cricket', City: 'Delhi' },
  { games: '3', name: 'Tenis', City: 'Sikkim' }
];

在反应选择中,对于defaultValue=[{value: 1, label: Hi}]. defaultValue像这个例子一样使用:

<Select
  isSearchable
  isClearable
  placeholder="GAMES"
  options={optionsAB}
  defaultValue={{
    value: apiData[0]?.games , 
    label: (optionsAB || []).filter(x => (x.value.includes(apiData[0]?.games)))[0]?.label
  }}
  onChange={(newValue, name) => handleChange(newValue, 'games')}
/>

您也可以在 Java 中正常使用它。

于 2021-05-04T14:31:09.383 回答