[解決済み] ReactJSでコンポーネントがtext型の非制御入力を制御エラーに変更する場合
2022-03-14 15:25:39
質問
<ブロッククオート警告 コンポーネントが text 型の非制御入力を制御入力に変更しています。入力要素は非制御型から制御型に(またはその逆に)切り替わるべきではありません。コンポーネントの寿命が尽きるまで、controlled か uncontrolled のどちらかの入力要素を使用するか決めてください。
以下は私のコードです。
constructor(props) {
super(props);
this.state = {
fields: {},
errors: {}
}
this.onSubmit = this.onSubmit.bind(this);
}
....
onChange(field, e){
let fields = this.state.fields;
fields[field] = e.target.value;
this.setState({fields});
}
....
render() {
return(
<div className="form-group">
<input
value={this.state.fields["name"]}
onChange={this.onChange.bind(this, "name")}
className="form-control"
type="text"
refs="name"
placeholder="Name *"
/>
<span style={{color: "red"}}>{this.state.errors["name"]}</span>
</div>
)
}
解決方法は?
その理由は、あなたが定義した状態にあります。
this.state = { fields: {} }
フィールドを空白のオブジェクトとして使用するため、最初のレンダリング時に
this.state.fields.name
は
undefined
となり、入力フィールドはその値を取得します。
value={undefined}
そのため、入力欄が制御不能になります。
inputに何らかの値を入力したら。
fields
に変更されます。
this.state = { fields: {name: 'xyz'} }
そしてこのとき、入力フィールドは制御されたコンポーネントに変換されます。それが、エラーが発生する理由です。
あるコンポーネントが、制御されていないtextタイプの入力を、制御されるように変更しています。 制御されます。
考えられる解決策
1- 定義
fields
を状態にしてください。
this.state = { fields: {name: ''} }
2- または、value プロパティを定義するために 短絡的な評価 このように
value={this.state.fields.name || ''} // (undefined || '') = ''
関連
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
Vue Element-uiは、アイコンを追加するためのツリーコントロールノードを詳細に実装しています。
-
vueネットワークリクエストソリューション ネイティブネットワークリクエストとjsネットワークリクエストライブラリ
-
jsを使った簡単な照明スイッチのコード
-
JavaScriptの配列共通メソッド解説
-
vueにおけるv-forループオブジェクトのプロパティ
-
[解決済み】 `string.split is not a function` というエラーの原因は何ですか?
-
[解決済み】 Uncaught TypeError : undefined のプロパティ 'replace' を読み取れない In Grid
-
フロントエンド非同期(アシンク)ソリューション(全ソリューション)
-
[解決済み] Reactjs - フォーム入力の検証
-
[解決済み] React - 制御不能な入力を変更する