Pracovala som na Vue 2 projekt na chvíľu, a pri aktualizácii našich linting požiadavky, ktoré som objavil, že sme mali prop
mutácie chyby v mnohých našich dieťa komponentov. V našom projekte sme sa prejsť singleton objekt ako prop mnohých komponentov a boli pôvodne aktualizácia objekt priamo od dieťaťa komponentov. Vue sa zdá, že naznačujú, pomocou v-bind.sync
funkcia na aktualizáciu props
od detskej zložky (alebo pomocou rovnocenných v-bind
a v-on
). Tento, však, nie je vyriešenie problému prop
modifikácia od vnorené komponentov v poli.
Trvať to (pseudo)kód pre príklad, ktorý používa prop
mutácia:
Poznámka: Predpokladajme const sharedObject: { arrayElements: Array<{ isSelected: boolean }> } = ...
Stránky.vue
<template>
...
<Component1 :input1="sharedObject" />
...
</template>
Component1.vue
<template>
...
<template v-for="elem in sharedObject.arrayElements">
<Component2 :input2="elem" />
</template>
...
</template>
Component2.vue
<template>
...
<q-btn @click="input2.isSelected = !input2.isSelected"></q-btn>
...
</template>
Aký je správny spôsob, ako aktualizovať majetku ako input2.isSelected
z vnorených komponentov v Vue 2? Všetky prístupy ja som myslel, že sú chybné.
Chybné Prístupy
Som veriť , že by sme chceli bublina, ktorá input2.isSelected
bol upravený v Component2
na Page.vue
avšak, zdá sa, že buď viesť k chaotický kód alebo nepríjemný pocit, že sme len potláča linting chyby v kruhový objazd na ceste.
Na preukázanie "chaotický kód" prístup, uvedomíme si, že Page.vue
nevie index z elem
v sharedObject.arrayElements
. Preto by sme potrebovali na vyžarovanie objektu Page.vue
z Component1
ktorá obsahuje stav input2.isSelected
ako aj index elem
v sharedObject.arrayElements
. Toto sa chaotický rýchlo. Čo o príklad, kde máme:
Component1.vue
<template>
...
<template v-for="elem in sharedObject.arrayElements">
<template v-for="elem2 in elem.arrayElements">
<Component2 :input2="elem2" />
</template>
</template>
...
</template>
v tomto prípade, potom by sme mohli musieť prejsť up 2 indexy! Nezdá sa, ako udržateľné riešenie mňa.
Alternatívne, že som si myslel ze je callback funkcie (prešiel ako prop prostredníctvom komponentu hierarchie), ktorá berie ako vstupný prvok chceme aktualizovať a objekt, ktorý obsahuje vlastnosti, ktoré chceme aktualizácie (pomocou Object.assign
).
To je pre mňa veľmi nepríjemný, pretože neviem, skutočný dôvod, prečo nemôžeme aktualizácia pass-o-odkaz prop z dieťa komponentu. Mne sa to zdá ako je to len objazde spôsob aktualizácii prešiel z Component2
bez linter si všímať. Ak tam nejaké kúzla zmene, ktorá sa stane rekvizity, keď sú odovzdávané dieťa komponenty, potom iste absolvovanie predmetu, ktorý som dostal v Component2
na callback funkcie a úpravy sa v nadradený komponent by v podstate len aktualizovať prop v detskej zložky, ale zložitejšie.
Aký je správny spôsob, ako sa blíži tento problém v Vue 2?