私のアプリケーションでは[email protected]を使用します。いくつかのフィールドがあり、私は動的に検証関数を定義する必要があります。私はこのReduxフォーム非同期検証無限再帰
validate={[number, (value, values) => {
const min = values["participation-card-" + id + "-slice-" + slice + "-min"];
return min >= value ? "Invalid slice" : undefined;}]
のようなこの
const validateMaxSlice = (slice, id) => (value, values) => {
const min = values["participation-card-" + id + "-slice-" + slice + "-min"];
return min >= value ? "Invalid slice" : undefined;
};
またはインラインのようなvalidateMaxSliceを定義するとき、私は値
<Field
component={SemanticFormField}
as={Input}
placeholder="From"
name={"participation-card-" + id + "-slice-" + slice + "-min"}
validate={[number]}
/>
<Field
component={SemanticFormField}
as={Input}
placeholder="to"
name={"participation-card-" + id + "-slice-" + slice + "-max"}
validate={[number, validateMaxSlice(slice, id)]}
/>
に正しいフィールドを探すためにIDとスライスが必要であることを 注意
コンポーネントをレンダリングすると、アプリケーションは無限ループに入ります。
質問はなぜそれを修正するのですか?
編集:
はあなたの助けをありがとう!ここで私はそれを
容器部品の実装方法である:
createSlice() {
const id = uuidv4();
return {
id,
validators: (value, values) => {
const min = values["participation-card-" + this.props.id + "-slice-" + id + "-min"];
return valSup(value, "Tranche incorrecte")(min);
},
};
}
addParticipationSlice() {
let participationSlices = this.state.participationSlices;
participationSlices.push(this.createSlice());
this.setState({
participationSlices,
});
}
シーン一部:
<Field
component={SemanticFormField}
as={Input}
name={"participation-card-" + id + "-slice-" + slice.id + "-max"}
size="mini"
width={7}
validate={[number, slice.validators]}
/>