Я пытаюсь восстановить компонент, если selectedLeague был изменен
<label class = "label">Select league</label>
<div class = "selector">
<v-select
v-model = "selectedLeague"
:dropdown-should-open = "dropdownShouldOpen"
:options = "leagues"
label = "displayLeague"
placeholder = "Select a league"
/>
</div>
<div v-if = "selectedLeague">
<LeagueTopScorers :is = "selectedLeague" :selectedLeague = "selectedLeague.id.toString()" />
</div>
В компоненте LeagueTopScorers я получаю API, чтобы получить лучших бомбардиров из выбранной лиги.
Я пробовал :watch, v-on:, created()
Я пытаюсь передать новую переменную в свой компонент, который должен извлекать данные и отображать их в моем родительском компоненте.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


<LeagueTopScorers /> перерисовывается, когда selectedLeague изменяется 1, но не перемонтируется.
Он монтируется только тогда, когда selectedLeague меняется с ложного значения на истинное (потому что именно тогда изменяется значение v-if).
Есть несколько проблем с вашим вопросом:
v-select, что такое <LeagueTopScorers /> или как :is выглядит на <LeagueTopScorers />.Из фрагмента, который вы разместили, я предполагаю следующее:
v-select — это либо vue-select , либо Vuetify select component:is будет работать над <LeagueTopScorers /> так же, как и над <component />. Подсказка: это не так, если только вы не закодировали это сами, в чем я сомневаюсь<LeagueTopScorers /> (например, onMounted), запускался, когда вы заменяете объект, хранящийся в selectedLeague, другим объектом.Если я прав, самый простой и чистый способ добиться такого поведения — создать вычисляемый 2:
const leagueId = computed(() => selectedLeague?.id.toString() || '')
... и используйте его в v-if, :key и :selectedLeague:
<LeagueTopScorers
v-if = "leagueId"
:selectedLeague = "leagueId"
:key = "leagueId" />
(без обертки <div v-if>).
Приведенное выше будет создавать новый экземпляр <LeagueTopScorers /> каждый раз, когда leagueId изменяется, и будет отображать его только тогда, когда leagueId не является ложным. Я считаю, что это то, чего вы пытались достичь технически 3.
Примечания:
1 - для проверки используйте onUpdated(() => console.info('updated...'))
2 - используйте selectedLeague.value?.id.toString(), если selectedLeague является ref
3 — в то же время я уверен, что фактические бизнес-требования могут быть выполнены без создания нового экземпляра <LeagueTopScorers /> каждый раз, когда leagueId изменяется, но я не могу помочь без дополнительных деталей и/или контекста.
Вью выберите. dropdown-should-open не является реквизитом Vuetify. Также может быть ошибка при передаче реквизита от родителя к дочернему, на основании комментария автора.
Большое спасибо, хороший ответ. Это решило мою проблему.
Рад, что это помогло вам. Попробуйте отметить его как принятый, если он помог вам решить проблему. Если вы считаете, что это недостаточно актуально для вашей реальной проблемы, рассмотрите возможность добавления своего собственного, где вы более четко объясните, в чем заключалась проблема и как вы ее устранили, и пометьте это как принятое. В идеале ваш вопрос (и принятый ответ) должен помочь другим пользователям легко найти решение аналогичной проблемы.
Можешь взглянуть на мою большую проблему? Это похоже на это, но в другом случае. stackoverflow.com/questions/74468482/…
Вы пытаетесь получить и отобразить новые данные после выбора? Поскольку истинная перезагрузка компонента не сохранит выбор, он вернется к значению по умолчанию перед выбором. Кроме того, ваше использование
:isне является правильным синтаксисом.