Я получил следующий магазин:
export const useMyStore = defineStore('myStore', {
state: () => {
return {
openTransOnly: false,
keyword: '',
openTransStatus: { nextPage: 0, complete: false },
pastDueTransStatus: { nextPage: 0, complete: false },
};
},
getters: {
transStatus(state) {
return state.openTransOnly ? state.openTransStatus : state.pastDueTransStatus;
},
},
});
Теперь предположим, что я хочу преобразовать указанное выше свойство «ключевое слово» в ссылку. Вот как я это сделал:
const myStore = useMyStore();
const { keyword: needle } = storeToRefs(myStore);
У меня также есть следующее вычисляемое свойство в моем компоненте:
const page = computed({
get: () => myStore.transStatus.nextPage,
set: (value) => (myStore.transStatus.nextPage = value),
});
который отлично работает. Однако я хотел бы знать, как использовать те же «storeToRefs» выше, чтобы определить «страницу». Я пробовал это:
const { keyword: needle, transStatus: { nextPage: page } } = storeToRefs(myStore);
Но пишет "страница не определена". Что я делаю не так? Это вообще возможно?
Как следует из названия storeToRefs
, он возвращает ссылки. transStatus
является рефери и не имеет свойства nextPage
, это transStatus.value.nextPage
. Раннее разрушение nextPage
приведет к потере реактивности из-за того, как работает transStatus
, и потому что значение является скалярным.
В случае, если это распространенный сценарий использования, магазин может включать page
вычисление. Поскольку состояние хранилища не должно изменяться вне хранилища, page
можно сочетать с setPage
действием.
Да. А прямая мутация состояния противоречит концепции хранилищ, используйте действие setPage.
Что именно вы подразумеваете под включением «страницы»? Вы имеете в виду, что я должен добавить новый геттер с именем «страница» в магазин Pinia? Если я это сделаю, что произойдет с его сеттером? Насколько я знаю, если я пойду по этому пути, я не смогу установить «страницу».