シナリオユーザーにドロップダウンがあり、オプションを選択します。そのドロップダウンを表示し、そのオプションをそのユーザーが前回選択したデフォルト値にしたい。
オプションでselected属性を使用していますが、Reactは選択時にデフォルト値を使用するように求める警告を生成します。
たとえば.
render: function() {
let option_id = [0, 1];
let options = [{name: 'a'}, {name: 'b'}];
let selectedOptionId = 0
return (
<select defaultValue={selectedOptionId}>
{option_id.map(id =>
<option key={id} value={id}>{options[id].name}</option>
)}
</select>
)
}
});
問題は、選択したオプションが任意のオプションになる可能性があるため、selectedOptionIdがわからないことです。 defaultValueを見つけるにはどうすればよいですか?
デフォルト値を選択せずにプレースホルダーを設定するインスタンスでは、このオプションを使用できます。
<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>
ここで、ユーザーはオプションを選択する必要があります!
編集
これが制御されたコンポーネントである場合
この場合、デフォルト値を使用しないでください。
function TheSelectComponent(props){
let currentValue = props.curentValue || "DEFAULT";
return(
<select value={currentValue} onChange={props.onChange}>
<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>
)
}
できることは、<select>
タグのselected
属性を、コンストラクターで設定した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>
);
}