vue3中setup()中定义的函数点击没有作用,用vue2写法就正常。请教下vue3下哪里写的不对
Count.vue代码如下:
<template>
<div>
<h1>当前求和为:{{sum}}</h1>
<select v-model.number="n">
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
</select>
<button @click="increment">+</button>
</div>
</template>
<script>
export default {
// eslint-disable-next-line vue/multi-word-component-names
name:'Count',
setup() {
let n = 1;
let sum = 0;
const increment=()=>{
sum += n
}
return {
n,
sum,
increment
}
}
}
</script>
<style lang="css">
button{
margin-left: 5px;
}
</style>
App.vue代码如下:
<template>
<div>
<Count/>
</div>
</template>
<script>
import Count from './components/Count.vue'
export default {
name:'App',
components:{Count},
}
</script>
main.js代码如下:
import { createApp } from 'vue'
import App from './App.vue'
createApp(App).mount('#app')
点击+号button,没有任何反应。
无
不知道哪里出了问题。
如果需要视图也更新,则需要使用ref或reactive,示例:
<script>
import { ref } from "vue";
export default {
// eslint-disable-next-line vue/multi-word-component-names
name: "Count",
setup() {
let n = ref(1);
let sum = ref(0);
const increment = () => {
sum.value += n.value;
};
return {
n,
sum,
increment,
};
},
};
</script>
我猜的是 你点击成功了。 你可以试着用console.log()输出你点击的函数的内容。你没有感觉到变化的原因是 你的n不是响应式的数据,虽然n变化了 但是视图并没有变化。
你可以是了解一下
可以试着使用
```
//使用ref声明基本类型
const num = ref(0);
//使用reactive声明对象
const animal = reactive({ type: "猫", name: "小花", age: 5 });
```javascript
有没有报错