Estoy tratando de hacer el sistema así:
Sin embargo, cuando hago clic en el botón Eliminar en 2, los valores del formulario anterior aún se muestran en la primera página del formulario. Probé los siguientes métodos:
Inertia.post(props.deleteDraftUrl, null, { preserveState: false });esto funciona cuando hago clic en un botón Eliminar en la primera página, pero cuando hago clic en el de la segunda página, los valores del formulario anterior aún se muestran.
form.post(props.deleteDraftUrl, { preserveState: false });Esto tampoco funciona.
Inertia.post(props.deleteDraftUrl, null, { preserveState: false, onSuccess: () => form.reset(), });Esto tampoco funciona.
Me han apilado en este problema por un día. Cualquier sugerencia es útil.
Actualizaciones: Se agregó todo el código en el script del componente. La primera página y la segunda página son más o menos iguales. También simplifiqué y modifiqué el código principalmente por razones de seguridad.
import {useForm} from "@inertiajs/inertia-vue3"; import {Inertia} from "@inertiajs/inertia"; export default { props: { pageTitle: { type: String, required: true, }, defaultValues: { type: Object, required: true, }, }, remember: ["form"], setup(props) { const form = useForm({ value1: props.defaultValues.value1, value2: props.defaultValues.value2, value3: props.defaultValues.value3, }); const deleteDraft = () => { if (confirm("delete the draft?")) { Inertia.post(props.deleteDraftUrl, null, { preserveState: false, onSuccess: () => console.log('success!'), }); } }; return { form, pageTitle, deleteDraft, }; }, }; </script>Encontré el problema y la respuesta. Por alguna razón, ¡solo otro tipo escribió un código que mantiene los valores ingresados en la variable defaultValues en el CONTROLADOR de la primera página! Es por eso que nunca borra la forma.
Entonces, la respuesta es: hacer que el proceso que mantiene los valores ingresados en la variable defaultValues no funcione después de enviar un formulario de borrador.
Lo siento por la causa estúpida, y "preserveState: false" parece funcionar bien.
Está pasando los valores predeterminados de sus campos al inicializar su formulario:
const form = useForm({ value1: props.defaultValues.value1, value2: props.defaultValues.value2, value3: props.defaultValues.value3, });Entonces, cuando restablezca el formulario, se restablecerá a esos valores.
Puede actualizar los valores predeterminados de su formulario antes de restablecer.
Inertia.post(props.deleteDraftUrl, { onSuccess: () => { form.defaults({ value1: null, value2: null, value3: null, }); form.reset(); }, });Si tiene muchos campos para restablecer, puede recorrer los valores predeterminados para borrarlos.
Object.keys(form.data()).forEach(field => form.defaults(field, null)); form.reset();