Ich weiß nicht, wie ich meine Vuex-Shop mit dem folgenden Problem zu organisieren.Vuex: Beobachten Sie die Logik im Zustand
Ich habe eine Reihe von Tasten/Aktionen, wie 100 von ihnen. Sie sind im Geschäft wie folgt organisiert:
buttons: [
{
text: 'Button 1',
doAction (store) {},
mustShow (store) {
return state.variable > 10 && state.variable2.counter < 12 && !state.variable3
}
}
...
]
ich sie einfach in meiner Ansicht angezeigt werden kann und verknüpfen ihre Aktion auf das Click-Ereignis:
<button v-for"button in buttons" @click="button.doAction()"></button>
Das Problem ist, dass jeder Knopf angezeigt werden kann oder nicht basiert auf willkürlicher komplexer Logik, die es nur kennt, wie Sie in der mustShow
Funktion sehen können. Jede Taste hat ihre eigene Logik.
Ich kann leicht einen Getter machen, die nur die Tasten, deren mustShow
Funktion gibt wahr haben nur die Aktionen zurück, die in einem bestimmten Zustand des Ladens angezeigt werden müssen:
availableActions (state) {
return state.buttons.filter(s => s.mustShow())
}
Dies funktioniert das erste Mal, aber das Problem ist, dass dieser Getter natürlich nicht reaktiv ist, da er nicht an Variablen, sondern an das Ergebnis einer Funktion gebunden ist, die nicht reaktiv ist.
Wie würden Sie den Code organisieren, damit dies funktioniert? Natürlich könnte man die gesamte Anzeigelogik für alle Knöpfe in einen einzigen Getter setzen. Was aber, wenn der Name der Schaltfläche auch dynamisch sein soll (als Ergebnis einer Funktion, die ihren Wert anhand beliebiger Variablen im Zustand berechnet)?
Dank
Also, im Grunde sollte DoAction (und mussShow) massive Aktionen mit einem langen Schalter drin sein? – pistacchio
Es hängt wirklich davon ab, was Sie mit jedem Knopfklick tun werden, wenn Sie denken, dass Sie einen großen Schalter brauchen, können Sie wahrscheinlich den vuex Code in Module für jeden einzelnen Teil Ihrer Anwendungen aufteilen. Alternativ können Sie etwas tun wie 'btnAtions [1] =() => {/ * Taste 1 Logik * /}' usw. für jede ID – Batato
werfen Sie einen Blick auf diese [vuex Module] (https: // vuex .vuejs.org/de/modules.html), kann es Ihnen wirklich helfen. – Batato