Vue обновляет состояние массива с помощью composition api

#typescript #vue.js #vue-composition-api

#typescript #vue.js #vue-composition-api

Вопрос:

Я пытаюсь создать какое-то состояние с помощью composition api в vue 3 со следующим файлом:

 // useNotifications.ts
const state = reactive<Array<Notification>>([]);

export function useNotifications() {
  return {
    state,
    add: (notification: Notification) => {
      state.push(notification);
    },
  };
}
  

Это состояние уведомления считывается и отображается в формате html из приведенного ниже:

 // TheNotifications.vue
setup() {
    const notifications = useNotifications();

    let first = notifications.state[0];

    return {
      first,
    };
  },
  

И уведомления добавляются при некотором событии отправки формы следующим образом:

 // SomeForm.vue
notifications.add({ type: "success", text: "Food added" });
  

Однако TheNotifications никогда не видит изменений при нажатии. Я пробовал несколько разных методов, например, с toRef помощью, но у меня ничего не получилось. Я новичок в этом компоненте composition api, и мне было интересно, чего мне не хватает.

Ответ №1:

reactive не работает с массивами. Похоже, это ограничение composition api. Вы можете прочитать аналогичное обсуждение здесь .

Используйте ref вместо reactive , он должен работать нормально. Я создал несколько подобных приложений и могу подтвердить, что они работают. Итак, напишите: const state = ref<Array<Notification>>([]); , у вас это будет работать. И, как правило, используйте ref для чего угодно, кроме объектов, это когда вы хотите использовать reactive . Это сложнее, но если вы используете их таким образом, это всегда будет работать.