[解決済み】React JSを使ったドロップダウンのOnChangeイベント
2022-04-05 14:42:45
質問
var MySelect = React.createClass({
change: function(){
return document.querySelector('#lang').value;
},
render: function(){
return(
<div>
<select id="lang">
<option value="select" onChange={this.change}>Select</option>
<option value="Java" onChange={this.change}>Java</option>
<option value="C++" onChange={this.change}>C++</option>
</select>
<p></p>
<p value={this.change}></p>
</div>
);
}
});
React.render(<MySelect />, document.body);
は
onChange
イベントは動作しません。
解決方法は?
変更イベントのトリガーは
<select>
要素ではなく
<option>
要素を使用します。しかし、問題はそれだけではありません。定義した方法は
change
関数は、コンポーネントの再レンダリングを引き起こしません。まだReactの概念を完全に理解していないようなので、もしかしたら
"Reactで考えよう"
が役立ちます。
選択された値をステートとして保存し、値が変化したときにステートを更新する必要があります。状態を更新すると、コンポーネントの再レンダリングがトリガーされます。
var MySelect = React.createClass({
getInitialState: function() {
return {
value: 'select'
}
},
change: function(event){
this.setState({value: event.target.value});
},
render: function(){
return(
<div>
<select id="lang" onChange={this.change} value={this.state.value}>
<option value="select">Select</option>
<option value="Java">Java</option>
<option value="C++">C++</option>
</select>
<p></p>
<p>{this.state.value}</p>
</div>
);
}
});
React.render(<MySelect />, document.body);
また、以下のことに注意してください。
<p>
要素には
value
属性があります。React/JSXは、よく知られたHTML構文を単に複製するだけで、カスタム属性を導入することはありません(ただし
key
と
ref
). もし、選択した値を
<p>
要素の中に入れるだけで、他の静的コンテンツと同じようになります。
イベント処理、ステート、フォームコントロールの詳細については、こちらをご覧ください。
関連
-
[解決済み] React with ES7: Uncaught TypeError: Cannot read property 'state' of undefined [duplicate] (未定義のプロパティ'state'を読み込むことはできません。
-
[解決済み】Uncaught TypeError: 未定義のプロパティ 'msie' を読み取れない - jQuery tools
-
[解決済み】Vueが定義されていない
-
[解決済み] jQueryを使ってドロップダウンリスト(セレクトボックス)から選択されたテキストを取得する
-
[解決済み] 配列の反復処理に "for...in "を使用するのは、なぜ良くないのでしょうか?
-
[解決済み] Reactルータを使ったプログラムによるナビゲーション
-
[解決済み] セレクトボックスのオプションをすべて削除してから、オプションを1つ追加して、jQueryで選択するにはどうすればよいですか?
-
[解決済み] jQueryでドロップダウンリストの選択値を変更する
-
[解決済み】ラジオボタン(INPUT type="radio")のOnChangeイベントハンドラが1つの値として動作しない。
-
[解決済み] 入力に強制的にonchangeイベントを発生させるには?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】Heroku:ノードアプリで「このアプリにはデフォルトの言語が検出されませんでした」エラーがスローされる
-
[解決済み】パッシブイベントリスナー内部でpreventDefaultができない
-
[解決済み】NodeJS "ESモジュールをロードするためにインポートを使用する必要があります。"
-
[解決済み】Reactのeslintエラーはpropsの検証で見つからない
-
[解決済み】Kendo Observable Bindingと併用する場合、Kendo Switch Labelsを変更することは可能ですか?[Kendo-UI]です。
-
[解決済み】Jestが予期しないトークンに遭遇した
-
[解決済み】ES6マップオブジェクトをソートすることは可能ですか?
-
[解決済み】 Uncaught Reference Error: stLight is not defined (in Chrome only)
-
[解決済み】ETIMEDOUTエラーの対処方法は?
-
[解決済み】Javascript、[オブジェクトHTMLInputElement]を表示中。]