estoy actualizando el estado en el formulario agregando dinámicamente campos de formulario, pero aparece este error lo que he intentado lo que debería suceder es que se deben agregar más campos a cada subcampo al hacer clic si quiero
const addExperience = () => { let temp = Object.assign({}, form); temp.experience.push({ company: "", position: "", startDate: "", endDate: "", description: "", }); setForm(temp); }esta es la forma
const [form, setForm] = useState({ name: "adarsh raj", email: "adarsh@gmail.com", phone: "83404dvsdsd", address: "patel chowk", city: "deoghar", education: [ { school: "dav ", major: "intermediate", GPA: "8.12", }, ], experience: [ { company: "venturepact llc", position: "associate software developer", startDate: "dd-mm-yyyy", endDate: "dd-mm-yyyy", description: "description", }, ], projects: [ { projectName: "project name", projectDescription: "project description", }, ], skills: [ { skillName: "your skill name", }, ], });código como este debería funcionar. Pero para probar, puedes probar esta sintaxis:
const addExperience = () => { let temp = Object.assign({}, form); temp.experience = [ ...temp.experience, { company: "", position: "", startDate: "", endDate: "", description: "" } ]; setForm(temp); };Object.assign(target, source) solo copia superficial.
el valor de retorno useState es inmutable ;
Consulte la siguiente demostración
var x = new Array(10).fill(0); Object.freeze(x); x.push(11) // same error Puede resolver este problema deep copying o reasignando la experiencia de la first layer .
Solo se puede asignar la primera capa porque se usa una copia superficial. No se puede resolver si el atributo del problema aparece en el segundo nivel. Por lo tanto, no se recomienda este método y se recomienda la copia profunda.
let temp = JSON.parse(JSON.stringify(form)); let temp = lodash.cloneDeep(form);// need install lodash