Как установить значение по умолчанию в response-select
У меня проблема с использованием реакции-select. Я использую редукционную форму, и я сделал свой компонент "реакция-выбор" совместимым с формой редукса. Вот код:
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>
Но проблема в том, что мое выпадающее меню не имеет значения по умолчанию, как мне хотелось бы. Что я делаю неправильно? Любые идеи?
Ответы
Ответ 1
Я думаю, вам нужно что-то вроде этого:
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}
/>
);
Ответ 2
Я использовал параметр defaultValue, ниже приведен код, которым я добился значения по умолчанию, а также обновил значение по умолчанию, когда в раскрывающемся списке выбран параметр.
<Select
name="form-dept-select"
options={depts}
defaultValue={{ label: "Select Dept", value: 0 }}
onChange={e => {
this.setState({
department: e.label,
deptId: e.value
});
}}
/>
Ответ 3
Если вы пришли сюда для реакции-выбора v2, но у вас по-прежнему возникают проблемы - версия 2 теперь принимает только объект в качестве value
, defaultValue
и т.д.
То есть попробуйте использовать value={{value: 'one', label: 'One'}}
вместо просто value={'one'}
.
Ответ 4
У меня была аналогичная ошибка. Убедитесь, что ваши параметры имеют атрибут value.
<option key={index} value={item}> {item} </option>
Затем сначала сопоставить значение элемента selects с параметром.
<select
value={this.value} />
Ответ 5
Я просто прошел через это сам и решил установить значение по умолчанию в функции INIT редуктора.
Если вы привязываете свой выбор с помощью reducex, лучше не "де-привязывать" его с выбранным значением по умолчанию, которое не отражает фактическое значение, вместо этого задайте значение при инициализации объекта.
Ответ 6
Если ваши параметры похожи на
var options = [
{ value: 'one', label: 'One' },
{ value: 'two', label: 'Two' }
];
Ваш {props.input.value}
должен соответствовать одному из 'value'
в вашем {props.options}
Значение, props.input.value
должно быть либо 'one'
, либо 'two'
Ответ 7
Если вы не используете redux-форму и используете локальное состояние для изменений, тогда ваш компонентact-select может выглядеть следующим образом:
class MySelect extends Component {
constructor() {
super()
}
state = {
selectedValue: 'default' // your default value goes here
}
render() {
<Select
...
value={this.state.selectedValue}
...
/>
)}
Ответ 8
Расширяя ответ @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.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
};
Ответ 9
Для автоматического выбора значения в выберите.
![enter image description here]()
<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>
Используйте атрибут value в теге select
value={this.state.contactmethod || ''}
решение работает на меня.