我有 2 個日期欄位,我想驗證開始日期應該早于結束日期。我已經正確驗證了這一點的邏輯,但唯一的問題是我可以為開始日期和結束日期選擇相同的日期和時間,并且不會顯示任何錯誤。我如何修改以下內容以檢查開始日期和結束日期是否相等?
const licenseSchema = Yup.object().shape<ObjectSchemaDefinition<FormData>>({
licenseStart: Yup.date(),
licenseEnd: Yup.date().when('licenseStart', {
is: (start) => start != null,
then: (end) =>
end.min(
Yup.ref('licenseStart'),
'License end date cannot be before start date',
),
}),
});
我的領域
<Field name="licenseStart" label="From" as={DateTimeTextField} />
<Field name="licenseEnd" label="To" as={DateTimeTextField} />
uj5u.com熱心網友回復:
如下更新您的架構。在本地回購測驗,作業正常。您可以if根據需要更新塊內的條件。
const licenseSchema = Yup.object().shape<ObjectSchemaDefinition<FormData>>({
licenseStart: Yup.date().typeError('required'),
licenseEnd: Yup.date().typeError('required')
.test('checkEndDate', '', function (value) {
const { path, parent, createError } = this;
if ((parent.licenseStart).getTime() >= value.getTime()) {
return createError({
path,
message: 'License end date cannot be before start date',
});
}
return true;
}),
}),
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/533672.html
