#vue.js #visual-studio-code #vuejs3
#vue.js #visual-studio-code #vuejs3
Вопрос:
У меня есть следующий код:
<!-- App.vue -->
<template>
<button @click="login">Login</button>
</template>
<script lang="ts">
import { loggedIn } from '../state'
import { defineComponent } from 'vue'
export default defineComponent({
data() {
return {
loggedIn,
}
},
methods: {
login() {
this.loggedIn = true
}
}
})
</script>
// state.ts
import { reactive, ref } from 'vue'
export const loggedIn = ref(true)
Приведенный выше код содержит ошибку компиляции (которая отображается как в VS Code, так и в from vue-cli-service serve
)
TS2322: Type 'true' is not assignable to type 'Ref<boolean>'.
> | this.loggedIn = true
Я почти уверен, что именно так я и должен это делать, поэтому я не уверен, почему я получаю сообщение об ошибке. Я могу изменить код на это, и ошибка исчезнет: this.loggedIn.value = true
но я почти уверен, что это не так, как должно работать, и я получаю эту ошибку во время выполнения:
Cannot create property 'value' on boolean 'false'
Почему я получаю эту ошибку компиляции в моем исходном коде?
Комментарии:
1. Попробуйте
loggedIn = ref<boolean>(true)
2. Надеюсь, это поможет и оценит повышение, спасибо
Ответ №1:
Источник: https://codesandbox.io/s/sad-cdn-ok40d
App.vue
<!-- App.vue -->
<template>
<div>
<button @click="login">Login</button>
<div>{{ data }}</div>
</div>
</template>
<script lang="ts">
import { loggedIn } from "./state";
export default {
name: "App",
setup() {
const data = loggedIn();
const login = () => (data.value = !data.value);
return { data, login };
},
};
</script>
State.ts
import { ref } from "vue";
export const loggedIn = () => ref(false);
Main.js
import { createApp } from "vue";
import App from "./App.vue";
createApp(App).mount("#app");
Итак, дело в том, что если мы используем composition API, мы должны использовать setup()
метод для настройки данных и методов.
Поскольку ref использует .value для изменения значения, нам это не нужно reactive
.
Реактивный используется для object
значений, которые он добавит Proxy
, чтобы следить за ключом / значениями объекта.
В этом случае мы должны использовать ref .