JS сброс вложенного объекта свойств

#javascript #vue.js

#javascript #vue.js

Вопрос:

Я использую Vue3 composition API и попытался сбросить форму с помощью Object.assign. К сожалению, он не сбрасывает форму при наличии вложенных свойств.

 const initialForm = {
    name: "",
    details: {
        type: ""
    }
};

const form = reactive({ ...initialForm });

const resetForm = () => {
    Object.assign(form, initialForm);
}
 

Здесь имя сбрасывается, но подробности.тип не сбрасывается. Каким должен быть подход к сбросу формы здесь?

Ответ №1:

оператор распространения ... , и Object.assign они выполняют только поверхностное копирование.

это означает, что он не изменяет вложенные ссылки. таким details.type образом, from initialForm — это то же самое, что и in form.details.type .

для этого вам необходимо глубоко скопировать / клонировать объект при назначении form . также, когда вы выполняете resetForm .

использование https://lodash.com/docs/4.17.15#cloneDeep

 const initialForm = {
    name: "",
    details: {
        type: ""
    }
};

let form = reactive( _.cloneDeep(initialForm));

const resetForm = () => {
    form =  _.cloneDeep(initialForm) ;
}
 

без внешнего пакета:

 const initialForm = {
    name: "",
    details: {
        type: ""
    }
};

let form = {...initialForm, details : {...initialForm.details} } ;

const resetForm = () => {
    form = {...initialForm, details : {...initialForm.details} } ;
}