#vue.js #components #vuex #vuejs3
Вопрос:
У меня есть проект Vue 3, в котором у меня есть родительский компонент, который загружает другой компонент, который затем загружает другой, который загружает другой.
Чтобы дать вам представление, у меня есть компонент кнопки. Кнопка добавляется несколько раз в набор цифр, набор переходит в карточку, а карточка переходит в компонент основного вида.
Итак, 4 уровня:
- Родительский компонент основного вида с X-картами (в данном случае у меня есть только одна)
- Компонент карты чисел с X группами
- Компонент группы чисел с X номерами
- Числовой компонент, используемый в группе
У меня есть привязанный var для компонента Number, который устанавливает его активным или нет, будучи истинным или ложным.
Я хочу, чтобы в моем <script setup>
теге в родительском главном компоненте (или одном компоненте внутри него) была установлена функция, позволяющая включать и выключать один или несколько компонентов кнопок (активное значение true или false).
Имеет ли это смысл?
Я думаю, нужно ли мне использовать данные emit или просто данные состояния из моего хранилища данных vuex. Но я немного запутался в том, как идентифицировать конкретный компонент кнопки (используемый несколько раз) из основного родительского компонента 4 уровня вверх…
(На самом деле я хочу добавить туда компонент кнопки другого типа, чтобы активировать его, включить или выключить все остальные кнопки, но я думаю, что если я пойму, как из одной функции в одном компоненте я могу получить доступ к переменной в другом наборе компонентов, которая решит мою проблему…)
Дайте мне знать, если в этом есть смысл и если вы можете мне помочь.
Не стесняйтесь указывать мне на документы Vue 3, я пытался найти решение, но я точно не знаю, где искать, и, поскольку я использую <script setup>
новый тег, я думаю, что многие примеры там не работают для меня.
Любая небольшая помощь будет признательна. Большое спасибо!
Комментарии:
1. С помощью vuex вам действительно не нужно идентифицировать дочерние компоненты, сами компоненты подписываются на состояние, которое вы задаете в родительском. например
<button :active="some_vuex_var">
2. Привет, моя проблема в том, что у меня есть мой компонент несколько раз, я не знаю, какой var vuex добавить… У меня есть
v-for
то, что отображает несколько компонентов кнопок. Каждая кнопка автоматически генерирует свой идентификатор. Увеличенные цифры. Я мог бы создать несколько переменных состояния vuex, по одному на кнопку, но это звучит излишне. Я предполагаю, что мой вопрос сейчас таков: может ли компонент, связанный с var vuex, быть несколько раз включен в шаблон, позволяющий клонировать var vuex несколько раз? Таким образом, все переменные vuex практически различны для нескольких экземпляров компонента, даже если у меня есть только 1 запись в данных хранилища для этого параметра?3. Кроме того, я хочу управлять кнопкой var внутри моего компонента верхнего уровня
<script setup>
не из<template>
моего компонента верхнего уровня, на самом деле мои кнопки находятся внутри другого компонента, поэтому их даже нет в моем текущем шаблоне компонента…4. @Мэтт, я проверил это. Это умно, но у меня это не работает. Потому что все мои кнопки связаны с одним и тем же var. Я могу увидеть решение, если создам все кнопки vars. Но это звучит неправильно. У меня есть карточка, на которой отображаются кнопки X. Это может быть 40, это может быть 60. Итак, если у меня есть 60 кнопок, мне нужно создать 60 переменных? И как-то разобрать этот идентификатор var в моем компоненте кнопки? Это звучит странно, потому что, хотя я знаю в своем приложении, какое у меня максимальное количество кнопок (при необходимости я могу поместить все отдельные переменные), что, если бы я этого не сделал? Должно быть что-то, чтобы это было более эффективным, динамичным и гибким… Как?
5. Теперь я думаю, может быть , у меня просто есть два var в моем магазине vuex, что-то вроде
buttonsPicked
иbuttonsActive
, и они представлены в виде массивов, а затем каким-то образом фильтруются, чтобы проверить, есть ли определенный идентификатор кнопки в массиве для каждого:active
,:disabled
и:class
. Похоже ли это на хороший подход Vue 3? Я думаю, что это может быть чище, чем определять все возможные идентификаторы кнопок в моем объекте состояния. Верно?
Ответ №1:
Спасибо, @Мэтт. В итоге я использовал переменную Vuex в качестве массива.
Затем в моем компоненте кнопки у меня есть это в моей <script setup>
переменной для выбранной, например:
const isPicked = computed(() => {
return store.state.session.btnsPicked.find(
(i) => i === props.btn
)
})
Таким образом, моя переменная компонента теперь реагирует на значения состояний Vuex.