Έχω ένα πεδίο εισαγωγής (αρχείο τύπου) που για κάποιο λόγο επικυρώνεται παρόλο που δεν απαιτείται. Με τον σειριακό αριθμό έχω επικύρωση και δεν απαιτείται και φαίνεται να λειτουργεί καλά, δεν υπάρχουν σφάλματα κατά την υποβολή του κενού πεδίου. Για το πεδίο εισαγωγής αρχείου θέλω μόνο το πεδίο εισαγωγής να επικυρώνεται όταν γίνεται αποστολή ενός αρχείου. Τι κάνω λάθος;, το αντιλαμβάνομαι (δείτε την παρακάτω εικόνα) όταν κάνω κλικ στην υποβολή για να δοκιμάσω την επικύρωση.
εδώ είναι ο κωδικός μου:
const validationSchema = Yup.object({
title: Yup.string()
.required("Title is required")
.min(8, "Title must be at least 8 characters")
.max(100, "Title cannot be more than 100 characters"),
description: Yup.string()
.required("Description is required")
.min(8, "Description must be at least 8 characters")
.max(100, "Description cannot be more than 100 characters"),
serialNumber: Yup.string()
.min(4, "Serial number must be at least 4 characters")
.max(16, "Serial number cannot be more than 16 characters"),
productStatus: Yup.number().required("A Status is required"),
productType: Yup.number().required("A type is required"),
img: Yup.mixed()
.test(
"fileSize",
"File size too large, max file size is 1 Mb",
(file) => file && file.size <= 1100000
)
.test(
"fileType",
"Incorrect file type",
(file) =>
file && ["image/png", "image/jpg", "image/jpeg"].includes(file.type)
),
});
{formik.errors["img"] && formik.touched["img"] && (
<div style={{ color: "#B2484D", fontSize: ".8rem" }}>
{formik.errors.img}
</div>
)}
<Field name="img">
{() => {
// < - this will take fieldProps.. not used in this case, using formik instead
return (
<>
<input
onBlur={formik.handleBlur}
onChange={({ currentTarget }) => {
const file = currentTarget.files![0];
const reader = new FileReader();
if (file) {
reader.onloadend = () => {
setSelectedFile({
file,
previewURI: reader.result!,
});
setuploadbtnLabel(
`You selected: ${file.name} - click again to change`
);
};
reader.readAsDataURL(file);
formik.setFieldValue("img", file);
}
}}
ref={inputFile}
type="file"
style={{ display: "none" }}
accept=".png,.jpg,.jpeg"
/>
</>
);
}}
</Field>
ΕΠΕΞΕΡΓΑΣΙΑ: εδώ είναι ένα codesandbox https://codesandbox.io/s/thirsty-chandrasekhar-34q1q?file=/src/App.js
notRequired
και χωρίς επιτυχία, στη συνέχεια προστέθηκαν και τα δύοnonRequired
καιnullable
, αλλά ούτε και με αυτό. 15.12.2020notRequired()
εδώ Δοκιμάστε να αλλάξετε τη γραμμή 76. Ελπίζω να σας βγει σε καλό! 15.12.2020(file) => file && file.size <= 1100000
σε(file) => file ? file.size <= 1100000 : true
και φαίνεται να λειτουργεί. Θα κάνω περισσότερες δοκιμές, ΕΥΧΑΡΙΣΤΩ! 19.12.2020