Если честно, если у вас есть два компонента в иерархии, то это не требует Vuex. Вам просто нужно подумать о ваших компонентах и о том, как они взаимодействуют.
Если у компонента PlayerCard
есть дочерний компонент ColorPicker
, то вы правы, что компонент ColorPicker
должен генерировать событие с выбрал цвет. Компонент PlayerCard
может просто прослушивать это событие и устанавливать любое связывание, в котором оно нуждается:
<!-- /components/PlayerCard.vue -->
<template>
<div v-bind:style="{ 'background-color': this.backgroundColor }">
<color-picker v-bind:value="backgroundColor" v-on:input="updateBackgroundColor" />
</div>
</template>
<script>
export default {
components: {
ColorPicker
},
data() {
return {
backgroundColor: '#000' // default
};
},
methods: {
updateBackgroundColor(event) {
this.backgroundColor = event.target.value;
}
}
}
</script>
<!-- /components/ColorPicker.vue -->
<template>
<div>
<input type="color" v-on:input="onInput" v-bind:value="value" />
</div>
</template>
<script>
export default {
methods: {
onInput(event) {
this.$emit('input', event);
}
},
props: {
value: {
required: true,
type: String
}
}
}
</script>
Здесь у нас есть два компонента. Когда вход в ColorPicker
меняет свое значение, он передает событие input
компоненту PlayerCard
, который затем устанавливает цвет фона в ответ.
Компонент ColorPicker
также остается « тупой », потому что он ничего не знает о компонентах, в которых он используется - он буквально позволяет пользователю выбрать цвет. Родительский компонент прослушивает событие input
и что-то делает в ответ. Таким образом, компонент ColorPicker
можно повторно использовать для выбора других цветов, которые могут вам понадобиться для компонента PlayerCard
, то есть цвета текста.
Здесь на самом деле нет ничего, что Vuex решит правильно написанным Vue компоненты не могут быть выполнены sh. Vuex просто облегчит кодирование проблем, а не их решение. Но Vuex имеет место в более крупных приложениях.