[ Vue ]データバインディング・双方向データバインディングとは

Vueを形成している超重要な概念であるデータバインディング・双方向データバインディングについて理解されているでしょうか。理解せずとも、感覚的に使っていらっしゃる方もいるかと思います。

データバインディングは様々な記事でも紹介されいています。
今回は、データバインディングのデータの流れをVue.js Devtoolsを用いながら確認していきます。

Q.データバインディングとは

データ操作 → データ描画を同期的に処理してくれる機能のことです。

データバインディングでは無い状態とは。例えば、jQueryでのDOM操作は基本的にはデータバインディングとは言えません。

 var word = "Hello"
 var wordEl = $("#word")
 var buttonEl = $("button")
 wordEl.text(word)
 buttonEl.on("click", function(){
   word = "クリックされた"
   wordEl.text(word) // ①
 })

①:wordEl.text(word) // ここで、反映処理実行することによって描画を実行しています。

この様にデータ変更と描画処理が同期していない場合はデータバインディングとは言いません。

Q.Vueのデータバインディングする処理を実行

では、Vue.jsにてデータバインディングを実施していきます。

v-bindを利用します。

<template>
  <div>
    <div>
      <p>Label:</p>
      {{ bind1 }}
      <p>Input:</p>
      <p>
        <input type="text" v-bind:value="bind1">
      </p>
    </div>
  </div>
</template>

<script>

export default {
  data () {
    return {
      bind1: "データバインディング",
    }
  },
}
</script>

変数:bind1のデータが → 描画されいているのが分かるかと思います。

Q.同期処理されている?

データバインディングが同期処理されていることを体感していきます。

Devtoolsからbind1 の変数を操作してみます。

するとbind1の変更に応じて同期的に描画されました。

Q.双方向データバインディングとは.

データバインディングとは、
・データ操作 → データ描画を同期的処理してくれる機能

対して、
双方向データバインディングとは、
・データ操作 → データ描画を同期的処理してくれる機能

・データ描画 → データ操作を同期的処理してくれる機能

というデータ描画とデータ操作が両方向で同期処理を実現してくれる機能です。

Q.Vueの双方向データバインディングする処理を実行

v-modelにて、双方向 データバインディングを確認していきます。

<template>
  <div>
    <div>
      <p>Label:</p>
      {{ bind1 }}
      <p>Input:</p>
      <p>
        <input type="text" v-bind:value="bind1">
      </p>
      <p>Label:</p>
      {{ bind2 }}
      <p>Input:</p>
      <p>
      <input type="text" v-model="bind2">
      </p>
    </div>
  </div>
</template>

<script>

export default {
  data () {
    return {
      bind1: "データバインディング",
      bind2: "双方向data-bind",
    }
  },
}
</script>

ここまででは、データバインディングとの違いは分からないかと思います。

input:データ内を変更していきます。
bind1のinput、bind2のinput両方変更することによってデータバインディング、双方向データバインディングの違いが鮮明になります。

bind1
inputを変更しましたが、data -> bind1は変更されていません。よって、Labelの値も「データバインディング」のままです。

対して

bind2
inputの変更をしたとろこ、data -> bind2 も同期的に変更されています。 よって、Labelの値も同期的に変更されています。

このように、Vue の dataをViewから同期的に変更できるのが双方向データバインディングの特徴です。

※リロードすると、data()で設定している値に戻ります。