GOOGLE ADS

четверг, 5 мая 2022 г.

Как деструктурировать свойство объекта из геттера Pinia, который условно возвращает объект?

Я получил следующий магазин:

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следует из названия, он возвращает refs. transStatusявляется ref и не имеет nextPageсвойства, это transStatus.value.nextPage. Раннее разрушение nextPageприведет к потере реактивности из-за того, как transStatusработает, и потому что значение является скалярным.

В случае, если это распространенный сценарий использования, хранилище может включать в себя pageвычисляемые. Поскольку состояние хранилища не должно изменяться вне хранилища, pageоно может быть связано с setPageдействием.

Комментариев нет:

Отправить комментарий

Laravel Datatable addColumn returns ID of one record only

Я пытаюсь использовать Yajra Datatable для интеграции DataTable на свой веб-сайт. Я смог отобразить таблицу, но столкнулся с проблемой. В по...