答案 0 :(得分:23)
React使用value
instead of selected
来确保表单组件的一致性。您可以使用defaultValue
设置初始值。如果您是controlling the value,则还应设置value
。如果没有,请不要设置value
,而是处理onChange
事件以对用户操作做出反应。
注意 value
和defaultValue
应该与该选项的value
匹配。
答案 1 :(得分:6)
您可以做的是selected
标记上的<select>
属性是您在构造函数中设置的this.state
属性。这样,您设置的初始值(默认值)以及下拉菜单更改时您需要更改状态。
constructor(){
this.state = {
selectedId: selectedOptionId
}
}
dropdownChanged(e){
this.setState({selectedId: e.target.value});
}
render(){
return(
<select value={this.selectedId} onChange={this.dropdownChanged.bind(this)}>
{option_id.map(id =>
<option key={id} value={id}>{options[id].name}</option>
)}
</select>
);
}
答案 2 :(得分:2)
在要设置占位符且未选择默认值的实例中,可以使用此选项。
<select defaultValue={'DEFAULT'} >
<option value="DEFAULT" disabled>Choose a salutation ...</option>
<option value="1">Mr</option>
<option value="2">Mrs</option>
<option value="3">Ms</option>
<option value="4">Miss</option>
<option value="5">Dr</option>
</select>
在这里,用户被迫选择一个选项!
答案 3 :(得分:2)
像这样使用 defaultValue 和 onChange
const [myValue, setMyValue] = useState('');
<select onChange={(e) => setMyValue(e.target.value)} defaultValue={props.myprop}>
<option>Option 1</option>
<option>Option 2</option>
<option>Option 3</option>
</select>
示例 https://codesandbox.io/s/priceless-lamarr-fetpr?file=/src/App.js
答案 4 :(得分:0)
谢谢大家的关注!我和我的同事刚刚发现default_value
属性是一个常量,而不是变量。
在我构建的其他React表单中,Select的默认值是在关联的Context中预设的。因此,第一次呈现Select时,default_value
被设置为正确的值。
但是在我最新的React表单(一个小模式)中,我将表单的值作为prop传递,然后使用useEffect
来填充关联的Context。因此,第一次呈现Select时,default_value
被设置为null
。然后,当填充了Context并且应该重新呈现Select时,default_value
无法更改,因此未设置初始默认值。
解决方案最终很简单:改用value
属性。但是弄清楚为什么default_value
不能像我的其他表格一样工作需要花费一些时间。
我发布此信息是为了帮助社区中的其他人。
答案 5 :(得分:0)
useState
使用defaultValue
选择默认值。
const statusOptions = [
{ value: 1, label: 'Publish' },
{ value: 0, label: 'Unpublish' }
];
const [statusValue, setStatusValue] = useState('');
const handleStatusChange = e => {
setStatusValue(e.value);
}
return(
<>
<Select options={statusOptions}
defaultValue={[{ value: published, label: published == 1 ? 'Publish' : 'Unpublish' }]}
onChange={handleStatusChange}
value={statusOptions.find(obj => obj.value === statusValue)} required />
</>
)
答案 6 :(得分:0)
不使用selected in选项设置值的简单解决方案,
请按照以下步骤操作:
将值默认为 0 [我不认为它是要使用的值] 到 x-column
4 个步骤
现在导航,列中的值默认为第2步中标记的值/您希望在selected中设置的值
我已经尝试过并且对我有用
一个小的更正.. 图像中的第 45 行.. 将该列读作 column_value_id