[解決済み] Reactでチェックボックスの "check "プロパティを設定する
質問
Reactとチェックボックスについて、非常に厄介な問題を抱えています。私が取り組んでいるアプリケーションでは、バックエンドに永続化される設定を表すチェックボックスのリストが必要です。 設定を元の状態に戻すオプションがあります。 .
まず、設定のマップのようなオブジェクトを持つコンポーネントを作成しました。各設定はキーとブール値を持っています。したがって
{
bubbles: true,
gregory: false
}
と表現することである。
<input type="checkbox" value="bubbles" checked="checked" />
<input type="checkbox" value="gregory" />
さて、Reactはチェックボックスがどのように機能するかについて無知なようです。私はチェックボックスの値を設定したいのではなく、"checked" プロパティが欲しいのです。
それでも、こんな風にやってみると
<input
type="checkbox"
value={setting}
checked={this.settings[setting]}
onChange={this.onChangeAction.bind(this)}
/>
こんな警告が出るんだけど。
警告 AwesomeComponent は、checkbox 型の非制御入力を制御入力に変更しようとしています。入力要素は、非制御型から制御型に (あるいはその逆に) 切り替わるべきではありません。コンポーネントの寿命が尽きるまで、controlled か uncontrolled の入力要素を使用するかどうか決めてください。詳細はこちら。[ 何度読んでも役に立たないドキュメントページ ]
そこで、個々のチェックボックスをラップするための別のコンポーネントを作成することにしたところ、次のようになりました。
<input
type="checkbox"
checked={this.state.checked}
onChange={this.onChangeAction.bind(this)}
/>
ここで
checked
は、私の状態に直接存在するプロパティです。
これでも同じ警告が出るので、試しに
defaultChecked
:
<input
type="checkbox"
defaultChecked={this.state.checked}
onChange={this.onChangeAction.bind(this)}
/>
これにより、警告は消えますが、今度は
checked
の値をデフォルトのものに戻します。そこで、メソッドを弄ってみたところ
componentWillReceiveProps
この方法で、私は自分の状態が正しいことを確信しました。
this.state.checked
が正しく表示され、コンポーネントが再びレンダリングされます。
そして、そうなる。しかし、チェックボックスは元のままです。
とりあえず、この醜い警告を残して、私は
checked
.
どうすれば、警告が消えるように修正できますか?
おそらく、コンポーネントを強制的に再レンダリングする方法があるのではないかと考えていました。
defaultChecked
の値を使用しています。しかし、その方法がわかりません。おそらく、次のような警告が表示されないようにするのでしょう。
だけ
をこのコンポーネントで使用できますか?それは可能ですか?もしかして、他に何かできることがあるのでしょうか?
解決方法は?
を設定すると問題が発生します。
checked
プロパティは、チェックボックスの
null
または
undefined
.
しかし、これらはJSではファルシーな値です。
Reactは
null
プロパティが設定されていないかのように
を全く使用しません。チェックボックスのデフォルトの状態はチェックされていない状態なので、すべてうまくいきますが。次に
checked
から
true
React は、プロパティが突然存在するようになったと考えます! これは、React が非制御型から制御型に切り替えたと判断したときで、現在、プロパティの
checked
が存在します。
この例では、次のように変更することでこの警告を取り除くことができます。
checked={this.settings[setting]}
を
checked={!!this.settings[setting]}
. ダブルバンに注目してください (
!!
). を変換するそうです。
null
または
undefined
から
false
(そして
true
を登録すると、Reactはあなたの
checked
プロパティの値として
false
を作成し、制御されたフォームコンポーネントでスタートします。
私もこの問題を抱えていて、私も、この記事を読んで
コントロールド・コンポーネントに関するドキュメント
何度やってもダメでしたが、やっとわかったので、共有したいと思います。また
バージョン15.2.0
を設定することで、通常の入力がトリガーされ、制御されるようになります。
value
を設定すると、チェックボックスが制御されるように初期化されます。
checked
に関係なく
value
というプロパティがあり、少し混乱しました。
関連
-
[解決済み] ReactJS: Warning: setState(...): 既存の状態遷移の間に更新することはできません
-
[解決済み] nextjsで異なる.envファイルを使用するには?
-
[解決済み] jQueryでチェックボックスに "checked "を設定する
-
[解決済み] Reactルータを使ったプログラムによるナビゲーション
-
[解決済み] React JSX内のループ
-
[解決済み] ReactJSでコンポーネントがtext型の非制御入力を制御エラーに変更する場合
-
[解決済み] React - 制御不能な入力を変更する
-
[解決済み] HTMLのチェックボックスのchecked属性の適切な値は何ですか?
-
[解決済み】jQueryでチェックボックスがチェックされているかどうかを確認するにはどうすればよいですか?
-
[解決済み】チェックボックスがチェックされているかどうかをjQueryで確認する。
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】ReactJS: マテリアルuiのブレークポイントについて
-
[解決済み] FontAwesomeの無料パッケージに含まれているアイコンのオブジェクト名はどこにあるのですか?
-
[解決済み] useStateプロパティのフックにmap関数を使用する方法
-
[解決済み] SVGサークル内の画像にボーダーを追加する方法
-
[解決済み] React - 予想外のトークン、予想外の;
-
[解決済み] ReactJS で inst.render が関数でないエラーが発生する
-
[解決済み] eslint: no-case-declaration - case ブロックで予期しない字句の宣言があった。
-
[解決済み] Static HTML elements with event handlers require a role." を修正するにはどうすればよいですか?
-
[解決済み] react-navigation v5を使ったreact-nativeアプリのAppNavigatorの構文を更新する。
-
[解決済み] Error: yarn start - エラー コマンド "start" が見つかりません。