Day 9 - 元件的资料传输(1)

在Vue中,元件间资料沟通传递的方式,一直都是个不容忽视的问题,妥善处理资料流,也是身为工程师的必学课题。

如果没用元件,当我们今天想要分离多个资料流的问题的时候,可能就会面临以下的情况。

<template>
  <div id="app">
  <button @click="count++">You clicked me {{ count }} times.</button>
  <button @click="count++">You clicked me {{ count }} times.</button>
  </div>
</template>

<script>
export default {
  name: "App",
  data() {
    return {
      count:0
    };
  },
};
</script>

上面是一个点击计数器的范例,当我们点击画面按钮的时候,按钮里面的数字也会随着增加。
https://ithelp.ithome.com.tw/upload/images/20210924/20128925RbxlzxN6ni.png

当我按下其中一个按钮的时候,两个按钮内的 count 都增加了! 这是因为这两个按钮共用同一份 count 的资料流。

我们虽然可以新增新的物件去储存别的资料,可以用 count1 、 count2 ,这样新增下去。

我们虽然透过这样来避开错误,让每一个按钮拥有各自的物件来储存资料流,但这样我们的程序也失去了弹性,有几个按钮就必须事先新增几个 count 的属性,这样将难以reuse与maintain。

如果将其元件化,并把资料流抽离出来,可以写成以下的程序码:

<template>
  <div id="app">
    <!--<button @click="count++">You clicked me {{ count }} times.</button>
    <button @click="count++">You clicked me {{ count }} times.</button>-->
    <buttonCount></buttonCount>
    <buttonCount></buttonCount>
  </div>
</template>

<script>
const local_component = {
  // options
  data() {
    return {
      count: 0,
    };
  },
  template: `<button @click="count++">You clicked me {{ count }} times.</button>`,
};
export default {
  name: "App",
  components: {
    buttonCount: local_component,
  },
};
</script>

像这样,我们将计数器包装成独立的元件 <buttonCount>,虽然同样是计数器元件,但各自的 count 资料属性都是独立的,并不会因为按了 A 按钮,B 按钮就跟着加一。

如果要新增多组计数器,我们也只需要在 View 中继续增加 <buttonCount>的数量就可以了,不必担心彼此的资料是否冲突。


<<:  Batch Processing (2) - MapReduce Job Execution

>>:  Day9# Function 及 Function Receiver

JavaScript入门 Day14_如何使用数字6

今天要讲的是 Math.random( ) 那这个是什麽呢? random 有随机的意思 所以在ja...

【Day 12】MySQL Basics

Update(09/28): 已完成 section 4,5 晚上刚回台北QQ 这个笔记还蛮个人的,...

WordPress网站加速经验-体质最佳化与5款快取外挂测速+功能比较

对於WordPress网站来说,快取外挂对网页载入速度的确是有帮助的。 在已经进行一些基本最佳化的网...

[Day01] CH00:Hello, Java!

欢迎来到「30 天 Java 从陌生到更陌生」 我是 Piglet,接下来的 30 天,会带着初踏入...

前言

这次的系列文章主要目的是希望可以透过这些文章的撰写,来让自己统整从开始工作到现在学习的内容,并且透过...