Reactとcheckboxには非常に厄介な問題があります。私が作業しているアプリケーションでは、バックエンドに保持されている設定を表すチェックボックスのリストが必要です。 設定を元の状態のに復元するオプションがあります。Reactのcheckboxの "check"プロパティを設定する
まず、設定のマップのようなオブジェクトを持つコンポーネントを作成しました。各設定には、キーとブール値があります。したがって:
<input type="checkbox" value="bubbles" checked="checked" />
<input type="checkbox" value="gregory" />
は今、チェックボックスが動作するようになっている方法についての無知であるリアクトようだ:
{
bubbles: true,
gregory: false
}
はとして表現されます。私はチェックボックスの値を設定したくない、私は "チェックされた"プロパティが必要です。しかし
、私はこのような何かしようとした場合:
警告:AwesomeComponentを制御することがタイプのチェックボックスの制御不能な入力を変更している
<input type="checkbox" value={setting} checked={this.settings[setting]} onChange={this.onChangeAction.bind(this)} />
を、私はこの警告を取得します。入力要素は、制御されていない状態から制御された状態に切り替わるべきではありません(またはその逆)。コンポーネントの寿命の間、制御された入力要素または制御されていない入力要素を使用するかどうかを決めます。さらに詳しい情報:今すぐ
<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)}
/>
警告が表示されなくなりますが、今ではデフォルトの1にchecked
値をリセットすることができませんどの。だから私は方法componentWillReceiveProps
で試してみました。私の状態が正しいと確信しています。this.state.checked
は正しいですし、コンポーネントは再びレンダリングされます。
そしてそうです。しかし、チェックボックスは元のままです。 今のところ私はその醜い警告を残して、checked
を使用しています。 警告が消えるようにこの問題を修正するにはどうすればよいですか?
コンポーネントを強制的に再レンダリングする方法があると思われていたので、新しいdefaultChecked
値を取得して使用します。しかし、私はそれをどうやって行うのか分かりません。おそらくこのコンポーネントの警告を抑制するでしょうか?それは可能ですか?おそらく他にもできることがありますか?
:単にあなたのCheckBoxコンポーネントの
checked
小道具の値false
でdefaultPropsプロパティを追加します。いいえ。後に定義される未定義の変数です。ありがとうございました。 – Don私はこの回答を十分に拾い上げることはできません。条件付きで 'checked'属性自体を追加したり削除したりしていました。私はこのエラーメッセージがなぜ発生していたのか、困惑した20分を過ごしました。 ReactJSのエラーメッセージには、HTMLチェックボックス入力である矛盾した奇妙さを認識する特殊なケースが本当に必要です。他人がこれにぶつからないようにしてください。 –
信じられないほどの答え:)それは私が知っていない素晴らしいトリックです(ブール値に即座にキャストするためにダブル・バンを使用しています) –