Vue.js 3 - replace/update reactive object without losing reactivity
Though Boussadjra Brahim's solution works its not the exact answer to the question.
In the sense that reactive data can not be reassigned with =
but their is a way to reassign the reactive data. It is Object.assign
.
Therefore this should work
setup(){
const formData = reactive({})
onMounted(() => {
fetchData().then((data) => {
if (data) {
Object.assign(formData, data) // equivalent to reassign
}
})
})
}
Note: The solution is the Best way when your reactive object empty or always contains same keys; but if e.g formData
has key x
and data
does not have key x
then after Object.assign
, formData
will still have key x
, so not strictly not reassigning.
reactive
should define a state with nested fields that could be mutated like :
setup(){
const data= reactive({formData :null })
onMounted(() => {
fetchData().then((data) => {
if (data) {
data.formData = data
}
})
})
}
or use ref
if you just have one nested field:
setup(){
const formData = ref({})
onMounted(() => {
fetchData().then((data) => {
if (data) {
formData.value = data
}
})
})
}