Vue 2.xとVue 3.xの双方向結合原理について詳しく説明します。
双方向の結合の原理
Object.defineproperty()によりオブジェクト属性を再定義するset方法、get方法により実現され、この属性から値を取るとgetメソッドが起動され、この属性を変更するとsetメソッドが起動されますので、viewを更新する方法をいくつか置いておけばdata更新viewが実現できます。
ビュー上のデータが変更されると、dataのデータも変更されます。dataのデータが変更されると、ビュー中のデータもObject.defineProperty()を変更します。
Object.defineProperty()方法は、オブジェクトに新しい属性を直接定義したり、オブジェクトの既存の属性を変更したりして、このオブジェクトに戻ります。
文法: obj
属性を定義するオブジェクト。 prop
定義または変更する属性の名前またはSymbol。 descriptor
属性記述子を定義または変更します。
戻り値
関数のオブジェクトに渡されます。
オブジェクトに現在存在する属性記述子には、データ記述子とアクセス記述子の2つの主要な形式があります。データ記述子は、値を持つ属性であり、書き込み可能であり、書き込み不可であってもよい。アクセス記述子は、getter関数とsetter関数によって記述された属性です。一つのディスクリプタはこの二つのうちの一つしかない。同時に両者ではない。
作用
*オブジェクトの属性を一つに設定する方法は2つあります。
*get:この属性から値を取るとgetメソッドが起動します。
*set:この属性に値を付けるとsetメソッドがトリガされます。
name属性に値を付ける時にset方法をトリガし、set方法で値を保存します。
値を取る時にget方法をトリガし、get方法で値を戻ります。
vue 2.x双方向バインディングの原理
vue 3.x双方向バインディングの原理
Vue 3.xはproxy(代理)により実現されるデータの双方向結合である。
proxy
Object.definePropertyと同様に、オブジェクトの属性に2つの方法get&setを追加することもできます。
違い: Object.definePropertyは、オブジェクトの1つの属性にのみget&set方法を追加することができます。 Proxy:オブジェクトに一括で属性を設定するget&setメソッド
使い方:新たなproxyオブジェクトを作成します。
vue 3.xデータの双方向結合を実現する。
締め括りをつける
ここで、Vue 2.xとVue 3.xの双方向結合原理に関する記事を紹介します。Vue 2.xとVue 3.xの双方向結合原理に関する内容は以前の文章を検索してください。または下記の関連記事を引き続きご覧ください。これからもよろしくお願いします。
Object.defineproperty()によりオブジェクト属性を再定義するset方法、get方法により実現され、この属性から値を取るとgetメソッドが起動され、この属性を変更するとsetメソッドが起動されますので、viewを更新する方法をいくつか置いておけばdata更新viewが実現できます。
ビュー上のデータが変更されると、dataのデータも変更されます。dataのデータが変更されると、ビュー中のデータもObject.defineProperty()を変更します。
Object.defineProperty()方法は、オブジェクトに新しい属性を直接定義したり、オブジェクトの既存の属性を変更したりして、このオブジェクトに戻ります。
文法:
Object.defineProperty(obj, prop, descriptor)
パラメータ:属性を定義するオブジェクト。
定義または変更する属性の名前またはSymbol。
属性記述子を定義または変更します。
関数のオブジェクトに渡されます。
オブジェクトに現在存在する属性記述子には、データ記述子とアクセス記述子の2つの主要な形式があります。データ記述子は、値を持つ属性であり、書き込み可能であり、書き込み不可であってもよい。アクセス記述子は、getter関数とsetter関数によって記述された属性です。一つのディスクリプタはこの二つのうちの一つしかない。同時に両者ではない。
作用
*オブジェクトの属性を一つに設定する方法は2つあります。
*get:この属性から値を取るとgetメソッドが起動します。
*set:この属性に値を付けるとsetメソッドがトリガされます。
let obj = {}
// obj name get&set
Object.defineProperty(obj,'name',{
set:function (value){//value name
console.log(' set');
this._name=value// name, set
},
get:function(){
console.log(' get');
//
return this._name
}
})
name属性に値を付ける時にset方法をトリガし、set方法で値を保存します。
値を取る時にget方法をトリガし、get方法で値を戻ります。
vue 2.x双方向バインディングの原理
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<!-- V -->
<div id="v"></div>
<input type="text" id="ipt">
</body>
<script>
// MVVM:
// V ,M
// M ,V
// M
let data = {}
// data name get ,set
Object.defineProperty(data,'name',{
set:function(value){
// M ,V
document.querySelector('#v').innerHTML = value
},
get:function(){
return this._name
}
})
// input
document.querySelector('#ipt').oninput = function(e){
data.name = e.target.value
}
</script>
</html>
入力ボックスの内容が変更されると、oninputイベントが直ちにdataの内容を変更し、dataの中のnameが変更されるとset方法がトリガされ、最新の値をvに割り当て、データの双方向結合が実現される。vue 3.x双方向バインディングの原理
Vue 3.xはproxy(代理)により実現されるデータの双方向結合である。
proxy
Object.definePropertyと同様に、オブジェクトの属性に2つの方法get&setを追加することもできます。
違い:
let p = new Proxy(obj,{get:function(){},set:function(){}})
<script>
let obj = {}
let p = new Proxy(obj,{
get:function(obj,prop){
//obj : prop:
console.log(' get');
return obj[prop]
},
set:function(obj,prop,value){
// obj:
// prop
// value
console.log(' set');
//
obj[prop] = value
}
})
</script>
vue 3.xデータの双方向結合を実現する。
締め括りをつける
ここで、Vue 2.xとVue 3.xの双方向結合原理に関する記事を紹介します。Vue 2.xとVue 3.xの双方向結合原理に関する内容は以前の文章を検索してください。または下記の関連記事を引き続きご覧ください。これからもよろしくお願いします。