は、それが意図された方法で反応します。主にあなたの状態で検証が行われるはずです。あなたのフィールドを検証することができますが、これはあなたのためのものよりもユーザーのためのものです。
入力はvalue
のように状態からプロパティを取得し、そのonChange
メソッドは状態を更新する必要があります。すべての入力タイプには、(新しい文字が1つでも)新しい値で状態を更新する方法であるonChangeと、状態が更新されたために入力が更新された値に設定されているためです。
Here is the link to the docs
例:
<input
....
onChange={this.onChange}
/>
とあなたのクラスで必要なフィールドを検証したい場合は、単にあなたの状態を確認後
onChange(value){
this.setState({inputValue: value});
}
を持っている:
//this is an example function you can call when the save button is clicked
onSave(){
if(this.props.isRequired && this.state.value == ''){
alert('The input '+this.state.label+' requires a value';);
}
}
これで、ユーザーが保存をクリックし、状態が正しく記入されていない部分があると、かなりの検証メッセージを表示したい場合は、ユーザーに通知するためにUIを変更する独自のコードを作成するか、そこに素敵な図書館があります。
あなたは、renderFieldを使用してフォーム要素のタイプの問題を自分自身に課しました。次の2つのオプションがあります。異なるフォームタイプ(テキストエリア、選択ボックス、&入力)に対して独自のコンポーネントをレンダリングしたり、2つのアカウントを作成したりしないでください。
あなたが使用しているライブラリでは、単に<Field type="text" component={'textarea'} validate={required} />
または<Field type="text" component={'input'} validate={required} />
と言うことができます。エントリー用には、これは私が使用することをお勧めするテンプレートです。あなたの現在のシステムを使用したい場合、あなたは例えば入力またはTEXTAREAレンダリングする必要があるかどうかを決定するためのシステムを作成する必要があります:あなたの状態を管理することで、検証の取り扱い
const renderInputField = ({ input, label, type, meta: { touched, error, warning } }) => (
<div>
<label>{label}</label>
<div>
<input {...input} placeholder={label} type={type}/>
{touched && ((error && <span>{error}</span>) || (warning && <span>{warning}</span>))}
</div>
</div>
)
const renderTextareaField = ({ input, label, type, meta: { touched, error, warning } }) => (
<div>
<label>{label}</label>
<div>
<textarea {...input} placeholder={label} type={type}/>
{touched && ((error && <span>{error}</span>) || (warning && <span>{warning}</span>))}
</div>
</div>
)
//in your render function simply call
<Field type="text" component={renderInputField} validate={required} />
<Field type="text" component={renderTextareaField} validate={required} />
おかげで、非常に便利。私はredux形式の6.4.3を使用していますが、私はredux形式のフィールドを検証したいと思います。提案してください。 – shash
私はこのライブラリを一度も使用していません。彼らのドキュメントから、正しいフォーム要素タイプを返すようにrenderField関数を変更する必要があるようです。私は入力されていないすべてのHTMLを削除し、レンダリングする型を定義したいくつかのプロパティを持っています。私は自分のコンピュータではありませんが、今日後で例を掲示することができます – Osman
私の編集を参照してください。もしあなたが特定の図書館の質問をするのを助けなければ、 – Osman