Задать вопрос
@estluced

Как решить эту проблему с реактивностью объекта в vuex?

Добрый вечер!
Уже голову и гугл сломал с данной проблемой, сразу к коду:
Есть компонент который отправляет данные поста в vuex:
<template>
<div v-for="post in content_data" :key="post.id">
        <!-- content_data это очевидно массив с постами -->
        <!-- Просто фиксирую внимание, так как дальше фигурирует данный массив в описании -->
	<button @click="post_edit(post)">
			<p>
			Редактировать
			</p>
	</button>
</div>
</template>

<script>
export default{
	props:['post', 'content'],
	methods:{
        post_edit(i){
        	this.$store.dispatch('full_view', {i:2,d:i})
        }
	}
}
</script>


Далее через action full_view я сохраняю данные в state:
export default{
    state:{
        full_view_id: 0,
        full_view_data: false
    },
    getters:{
        full_view_id:(state)=>state.full_view_id,
        full_view_data:(state)=>state.full_view_data
    },
    actions:{
        full_view({state}, d){
            state.full_view_id=d.i
            if(d.d){
                state.full_view_data=d.d
            }else{
                state.full_view_data=false
            }
        }
    }
}


Суть проблемы в том что у меня есть компонент который редактирует пост, он же в свою очередь принимает данные с геттера full_view_data если он !== false, далее сохраняет в память компонента и после чего уже можно менять поступившие данные.
Как выглядит full_view_data если он !== false:
{
    'text':'Hello World!',
    'files':[{'id':0,'filename':'helloworld.jpg'}]
}

Так вот, когда уже все данные в компоненте, всё успешно отобразилось, нужно обновить 'files':[{'id':0,'filename':'helloworld.jpg'}] в 'files':[{'id':0,'filename':'goodbyeworld.jpg'}], ну и вот при обновлении памяти компонента обновляется массив content_data.
Память компонента выглядит так:
data(){
		return{
			post_data: this.$store.getters.full_view_data
//{
//    'text':'Hello World!',
//    'files':[{'id':0,'filename':'helloworld.jpg'}]
//}
		}
	},


Если более упрощенно, то компонент1 отдает данные о посте в vuex память, а в свою очередь другой компонент2 берет эти данные из памяти сохраняет у себя для дальнейшего редактирования, но при редактировании меняются входящие данные компонента1.
Как решить эту непростую проблему? То голову уже сломал, буду очень благодарен за любой ответ и предположение:)
Спасибо!
  • Вопрос задан
  • 98 просмотров
Подписаться 1 Простой Комментировать
Решения вопроса 1
Kozack
@Kozack Куратор тега Vue.js
Thinking about a11y
Не уверен. Но кажется, нужно копировать объект
post_data: JSON.parse(JSON.stringify(this.$store.getters.full_view_data))
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы