data

data选项是一个函数,返回一个对象

  1. data() {
  2. return {
  3. value: "请输入信息",
  4. };
  5. },

实例创建后再添加propety,响应式系统不会跟踪。对尚未提供所需值的property使用null、undefined等占位

注意事项:
vue2的data可以是对象,但vue3的data只能是函数,否则报错
vue2自定义组件里的data要使用函数,否则使用对象的话。有多个自定义组件使用同一个data的话。data就会互相污染修改

methods

方法,对data数据进行修改的方法

  1. methods: {
  2. add() {
  3. this.items.push("item" + this.items.length);
  4. },
  5. },

注意:
里面的方法不要使用箭头函数,因为使用箭头函数的话里面的this就指向window了,而不是当前的实例了。

computed

当有一个变量,这个变量如果依赖于data里面的某个属性,那么就可以用computed计算属性

  1. <div id="app">
  2. <fieldset>
  3. <legend>computed</legend>
  4. {{count}}
  5. <button @click="add">click</button>
  6. </fieldset>
  7. </div>
  8. <script>
  9. const App = {
  10. data() {
  11. return {
  12. books: ["book0"],
  13. };
  14. },
  15. methods: {
  16. add() {
  17. this.books.push("book" + this.books.length);
  18. },
  19. },
  20. computed: {
  21. count() {
  22. return this.books.length;
  23. },
  24. },
  25. };
  26. Vue.createApp(App).mount("#app");
  27. </script>

注意:
计算属性有缓存机制,如果依赖的数据未发生改变,则不会重新计算而是直接使用缓存值
不要使用箭头函数,否则this就不是实例对象

watch

watch会监控data中某个property变化,执行函数

  1. <div id="app">
  2. <fieldset>
  3. <legend>watch</legend>
  4. {{count}}
  5. <button @click="add">click</button>
  6. </fieldset>
  7. </div>
  8. <script>
  9. const App = {
  10. data() {
  11. return {
  12. count: 0,
  13. };
  14. },
  15. methods: {
  16. add() {
  17. this.count++;
  18. },
  19. },
  20. watch: {
  21. count(newcount, oldcount) {
  22. console.log(oldcount + "->" + newcount);
  23. },
  24. },
  25. };
  26. Vue.createApp(App).mount("#app");
  27. </script>

以上代码中的watch就是监听了count数据的变化,count数据每变化一次就把旧值和新值打印出来

什么时候需要用watch???
1.当只需要根据data中某个property的变化做出反应,但不一定需要结果时
2.当有异步操作时
3.当需要用到旧值时