日韩精品亚洲精品中文字幕乱伦AV|曰韩区二区三区日韩中文字幕五码|ady99久久人人看人人摸人人|动漫一区二区黄99精品视频在线|AV片在线观看亚洲中文国产精品|伦乱在线VA欧美性爱一二区|亚洲无码mv91热色视频|激情六月综合欧美精品中文

當前位置:首頁 > 軟件開放 > 正文內(nèi)容

vue3響應式原理代理與反射(vue3 響應式原理)

軟件開放2年前 (2023-01-18)1244

本篇文章給大家談談vue3響應式原理代理與反射,以及vue3 響應式原理對應的知識點,希望對各位有所幫助,不要忘了收藏本站喔。

本文目錄一覽:

【手把手教你搓Vue響應式原理】(一)初識Vue響應式

在講這個之前,首先要明白一點,這個所謂的響應式,其實本身就是對 MVVM 的理解。

MVVM 其實就是所謂的 Modal View ViewModal 。

簡單理解,就是你的 data 中的數(shù)據(jù),和 template 模板中的界面,本身就是兩個東西。

但是, Vue 給你做了一層中間的 ViewModal ,讓視圖上的改變能反映到 data 中, data 中的改變能反映到視圖上。

在這個反映過程中,ViewModal就是視圖和數(shù)據(jù)的一個橋梁。

同樣是讓 a + 1 。

在 Vue 中,這個橋梁是你看不見的,因為 Vue 都幫你完成了視圖和數(shù)據(jù)的變化傳遞。

而 React 就是侵入式的,因為要顯式地聲明 setState ,通過它,來設(shè)置變量的同時,設(shè)置視圖的改變。

所以,所謂的侵入式,其實就是對于橋梁的侵入。

所以, Vue 的神奇之處就在于,不需要我們手動地顯示調(diào)用 setState ,也就是這個橋梁, Vue 已經(jīng)幫我們橋接上了。

要讓 data 改變的同時,視圖也發(fā)生改變,所以,問題的所在,就是我們需要監(jiān)聽,什么時候,這個變量發(fā)生了變量。

然而, ES5 中,就有那么一個特性,可以做到對于數(shù)據(jù)的劫持(監(jiān)聽)。

它就是 Object.defineProperty 。

Object.defineProperty( obj, prop, descriptor ) 方法會直接在一個對象上定義一個新屬性,或者修改一個對象的現(xiàn)有屬性,并返回此對象,與此同時,它可以對 對象的一些額外底層的屬性進行設(shè)置 。例如可以設(shè)置 writable , enumerable , configurable 等屬性。

后面的額外屬性設(shè)置,才是我們使用它的重點。

但是,我們使用的不是上面的幾個屬性,最主要的還是它的 get set ,可以對屬性值的獲取和設(shè)置操作進行攔截。

get主要是可以對值的獲取進行攔截,,它必須要傳入一個 return ,并且, 該函數(shù)的返回值會被用作屬性的值 。我們可以來看一個例子:

由于設(shè)置了 get ,所以,輸出 a.name 的時候直接會被攔截,走 get() 中的 return 所以,此時, a.name 的值應該是 你已經(jīng)被攔截了!。

set主要是可以對值的設(shè)置進行攔截,該方法會接受一個參數(shù),那就是 被賦予的新值 。我們可以來看一個例子:

由于設(shè)置了 set ,所以,設(shè)置值的時候會被攔截,走 set() 中的方法。

所以, Vue 能自動獲取data中的改變,反映到視圖的原因,就是有對于變量的獲取和設(shè)置的劫持,當變量發(fā)生改變的同時, Vue 能在第一時間知道,并且對視圖做出相應的改變操作。

而這把鑰匙就是 Object.defineProperty 。

【尚硅谷】Vue源碼解析之數(shù)據(jù)響應式原理

Object.defineProperty() - MDN

Proxy(vue響應式原理:數(shù)據(jù)偵測--數(shù)據(jù)劫持和數(shù)據(jù)代理)

Object.defineProperty : 通過設(shè)定對象屬性getter/setter方法來監(jiān)聽數(shù)據(jù)的變化,同時getter也用于依賴收集,而setter在數(shù)據(jù)變更時通知訂閱者更新視圖。

1.無法檢測到對象屬性的新增或刪除

由于js的動態(tài)性,可以為對象追加新的屬性或者刪除其中某個屬性,這點對經(jīng)過Object.defineProperty方法建立的響應式對象來說,只能追蹤對象已有數(shù)據(jù)是否被修改,無法追蹤新增屬性和刪除屬性,這就需要另外處理。

2.不能監(jiān)聽數(shù)組的變化

vue在實現(xiàn)數(shù)組的響應式時,它使用了一些hack,把無法監(jiān)聽數(shù)組的情況通過重寫數(shù)組的部分方法來實現(xiàn)響應式,這也只限制在數(shù)組的push/pop/shift/unshift/splice/sort/reverse七個方法,其他數(shù)組方法及數(shù)組的使用則無法檢測到。

Proxy,字面意思是代理,是ES6提供的一個新的API,用于修改某些操作的默認行為,可以理解為在目標對象之前做一層攔截,外部所有的訪問都必須通過這層攔截,通過這層攔截可以做很多事情,比如對數(shù)據(jù)進行過濾、修改或者收集信息之類。借用 proxy的巧用 的一幅圖,它很形象的表達了Proxy的作用。

ES6原生提供的Proxy構(gòu)造函數(shù),用法如下:

其中obj為Proxy要攔截的對象,handler用來定制攔截的操作,返回一個新的代理對象proxy;Proxy代理特點:

1.Proxy的代理針對的是整個對象,而不是像Object.defineProperty針對某個屬性。只需做一層代理就可以監(jiān)聽同級結(jié)構(gòu)下的所有屬性變化,包括新增屬性和刪除屬性

2.Proxy也可以監(jiān)聽數(shù)組的變化

參考:

能說說vue的響應式原理嗎?

Vue 是一個 MVVM 框架,核心是雙向數(shù)據(jù)綁定,VM(視圖模型)是作為 V(視圖) 和 M(模型)的橋梁。下面是對 Vue 響應式(雙向數(shù)據(jù)綁定)的理解,如果錯誤盡請指出,一起交流,共同進步。

Vue響應式原理核心是 數(shù)據(jù)劫持,采用 ES5 的 object.defineproperty 的 getter 和 setter 方法。從一個例子出發(fā):

首先,在Vue初始化階段,通過 observer 對 data 中的屬性進行遞歸的劫持,包括 name、job_ undergo、a、b等

在 get階段也就是初始化視圖時,為每一個劫持的屬性分配一個 依賴收集器,主要收集當前屬性的觀察者對象,例子中 name 屬性在模板中有兩處被使用,那么 name 屬性的依賴收集器中就存放兩個觀察者對象

當點擊按鈕時,將 name 修改為 lisi 時,會觸發(fā) observer 的 setter 函數(shù),將 value 更新為 lisi 最新值,然后通知依賴收集器數(shù)據(jù)發(fā)生了更新。

依賴收集就是發(fā)布訂閱模式,依賴收集器會通知所有的觀察者對象,當前name 屬性有兩個觀察者對象。

觀察者對象調(diào)用對應的回調(diào)函數(shù)進行相關(guān)的處理和DOM更新

以上是純響應式原理的分析和總結(jié),下面配一張流程圖:

手寫 Vue3 響應式系統(tǒng):核心就一個數(shù)據(jù)結(jié)構(gòu)

響應式是 Vue 的特色,如果你簡歷里寫了 Vue 項目,那基本都會問響應式實現(xiàn)原理。

而且不只是 Vue,狀態(tài)管理庫 Mobx 也是基于響應式實現(xiàn)的。

那響應式是具體怎么實現(xiàn)的呢?

與其空談原理,不如讓我們來手寫一個簡易版吧。

響應式

首先,什么是響應式呢?

響應式就是被觀察的數(shù)據(jù)變化的時候做一系列聯(lián)動處理。

就像一個 社會 熱點事件,當它有消息更新的時候,各方媒體都會跟進做相關(guān)報道。

這里 社會 熱點事件就是被觀察的目標。

那在前端框架里,這個被觀察的目標是什么呢?

很明顯,是狀態(tài)。

狀態(tài)一般是多個,會通過對象的方式來組織。所以,我們觀察狀態(tài)對象的每個 key 的變化,聯(lián)動做一系列處理就可以了。

我們要維護這樣的數(shù)據(jù)結(jié)構(gòu):

圖片

狀態(tài)對象的每個 key 都有關(guān)聯(lián)的一系列 effect 副作用函數(shù),也就是變化的時候聯(lián)動執(zhí)行的邏輯,通過 Set 來組織。

每個 key 都是這樣關(guān)聯(lián)了一系列 effect 函數(shù),那多個 key 就可以放到一個 Map 里維護。

這個 Map 是在對象存在的時候它就存在,對象銷毀的時候它也要跟著銷毀。(因為對象都沒了自然也不需要維護每個 key 關(guān)聯(lián)的 effect 了)

而 WeakMap 正好就有這樣的特性,WeakMap 的 key 必須是一個對象,value 可以是任意數(shù)據(jù),key 的對象銷毀的時候,value 也會銷毀。

所以,響應式的 Map 會用 WeakMap 來保存,key 為原對象。

這個數(shù)據(jù)結(jié)構(gòu)就是響應式的核心數(shù)據(jù)結(jié)構(gòu)了。

比如這樣的狀態(tài)對象:

const obj = {

a: 1,

b: 2

}

它的響應式數(shù)據(jù)結(jié)構(gòu)就是這樣的:

const depsMap = new Map();

const aDeps = new Set();

depsMap.set('a', aDeps);

const bDeps = new Set();

depsMap.set('b', bDeps);

const reactiveMap = new WeakMap()

reactiveMap.set(obj, depsMap);

創(chuàng)建出的數(shù)據(jù)結(jié)構(gòu)就是圖中的那個:

圖片

圖片

然后添加 deps 依賴,比如一個函數(shù)依賴了 a,那就要添加到 a 的 deps 集合里:

effect(() = {

console.log(obj.a);

});

也就是這樣:

const depsMap = reactiveMap.get(obj);

const aDeps = depsMap.get('a');

aDeps.add(該函數(shù));

這樣維護 deps 功能上沒啥問題,但是難道要讓用戶手動添加 deps 么?

那不但會侵入業(yè)務代碼,而且還容易遺漏。

所以肯定不會讓用戶手動維護 deps,而是要做自動的依賴收集。

那怎么自動收集依賴呢?

讀取狀態(tài)值的時候,就建立了和該狀態(tài)的依賴關(guān)系,所以很容易想到可以代理狀態(tài)的 get 來實現(xiàn)。

通過 Object.defineProperty 或者 Proxy 都可以:

const data = {

a: 1,

b: 2

}

let activeEffect

function effect(fn) {

activeEffect = fn

fn()

}

const reactiveMap = new WeakMap()

const obj = new Proxy(data, {

get(targetObj, key) {

let depsMap = reactiveMap.get(targetObj);

if (!depsMap) {

reactiveMap.set(targetObj, (depsMap = new Map()))

}

let deps = depsMap.get(key)

if (!deps) {

depsMap.set(key, (deps = new Set()))

}

deps.add(activeEffect)

return targetObj[key]

}

})

effect 會執(zhí)行傳入的回調(diào)函數(shù) fn,當你在 fn 里讀取 obj.a 的時候,就會觸發(fā) get,會拿到對象的響應式的 Map,從里面取出 a 對應的 deps 集合,往里面添加當前的 effect 函數(shù)。

這樣就完成了一次依賴收集。

當你修改 obj.a 的時候,要通知所有的 deps,所以還要代理 set:

set(targetObj, key, newVal) {

targetObj[key] = newVal

const depsMap = reactiveMap.get(targetObj)

if (!depsMap) return

const effects = depsMap.get(key)

effects effects.forEach(fn = fn())

}

基本的響應式完成了,我們測試一下:

圖片

打印了兩次,第一次是 1,第二次是 3。

effect 會先執(zhí)行一次傳入的回調(diào)函數(shù),觸發(fā) get 來收集依賴,這時候打印的 obj.a 是 1

然后當 obj.a 賦值為 3 后,會觸發(fā) set,執(zhí)行收集的依賴,這時候打印 obj.a 是 3

依賴也正確收集到了:

圖片

結(jié)果是對的,我們完成了基本的響應式!

當然,響應式不會只有這么點代碼的,我們現(xiàn)在的實現(xiàn)還不完善,還有一些問題。

比如,如果代碼里有分支切換,上次執(zhí)行會依賴 obj.b 下次執(zhí)行又不依賴了,這時候是不是就有了無效的依賴?

這樣一段代碼:

const obj = {

a: 1,

b: 2

}

effect(() = {

console.log(obj.a ? obj.b : 'nothing');

});

obj.a = undefined;

obj.b = 3;

第一次執(zhí)行 effect 函數(shù),obj.a 是 1,這時候會走到第一個分支,又依賴了 obj.b。

把 obj.a 修改為 undefined,觸發(fā) set,執(zhí)行所有的依賴函數(shù),這時候走到分支二,不再依賴 obj.b。

把 obj.b 修改為 3,按理說這時候沒有依賴 b 的函數(shù)了,我們執(zhí)行試一下:

圖片

第一次打印 2 是對的,也就是走到了第一個分支,打印 obj.b

第二次打印 nothing 也是對的,這時候走到第二個分支。

但是第三次打印 nothing 就不對了,因為這時候 obj.b 已經(jīng)沒有依賴函數(shù)了,但是還是打印了。

打印看下 deps,會發(fā)現(xiàn) obj.b 的 deps 沒有清除

圖片

所以解決方案就是每次添加依賴前清空下上次的 deps。

怎么清空某個函數(shù)關(guān)聯(lián)的所有 deps 呢?

記錄下就好了。

我們改造下現(xiàn)有的 effect 函數(shù):

let activeEffect

function effect(fn) {

activeEffect = fn

fn()

}

記錄下這個 effect 函數(shù)被放到了哪些 deps 集合里。也就是:

let activeEffect

function effect(fn) {

const effectFn = () = {

activeEffect = effectFn

fn()

}

effectFn.deps = []

effectFn()

}

對之前的 fn 包一層,在函數(shù)上添加個 deps 數(shù)組來記錄被添加到哪些依賴集合里。

get 收集依賴的時候,也記錄一份到這里:

圖片

這樣下次再執(zhí)行這個 effect 函數(shù)的時候,就可以把這個 effect 函數(shù)從上次添加到的依賴集合里刪掉:

圖片

cleanup 實現(xiàn)如下:

function cleanup(effectFn) {

for (let i = 0; i effectFn.deps.length; i++) {

const deps = effectFn.deps[i]

deps.delete(effectFn)

}

effectFn.deps.length = 0

}

effectFn.deps 數(shù)組記錄了被添加到的 deps 集合,從中刪掉自己。

全刪完之后就把上次記錄的 deps 數(shù)組置空。

我們再來測試下:

圖片

無限循環(huán)打印了,什么鬼?

問題出現(xiàn)在這里:

圖片

set 的時候會執(zhí)行所有的當前 key 的 deps 集合里的 effect 函數(shù)。

而我們執(zhí)行 effect 函數(shù)之前會把它從之前的 deps 集合中清掉:

圖片

執(zhí)行的時候又被添加到了 deps 集合。

這樣 delete 又 add,delete 又 add,所以就無限循環(huán)了。

解決的方式就是創(chuàng)建第二個 Set,只用于遍歷:

圖片

這樣就不會無限循環(huán)了。

再測試一次:

圖片

現(xiàn)在當 obj.a 賦值為 undefined 之后,再次執(zhí)行 effect 函數(shù),obj.b 的 deps 集合就被清空了,所以需改 obj.b 也不會打印啥。

看下現(xiàn)在的響應式數(shù)據(jù)結(jié)構(gòu):

圖片

確實,b 的 deps 集合被清空了。

那現(xiàn)在的響應式實現(xiàn)是完善的了么?

也不是,還有一個問題:

如果 effect 嵌套了,那依賴還能正確的收集么?

首先講下為什么要支持 effect 嵌套,因為組件是可以嵌套的,而且組件里會寫 effect,那也就是 effect 嵌套了,所以必須支持嵌套。

我們嵌套下試試:

effect(() = {

console.log('effect1');

effect(() = {

console.log('effect2');

obj.b;

});

obj.a;

});

obj.a = 3;

按理說會打印一次 effect1、一次 effect2,這是最開始的那次執(zhí)行。

然后 obj.a 修改為 3 后,會觸發(fā)一次 effect1 的打印,執(zhí)行內(nèi)層 effect,又觸發(fā)一次 effect2 的打印。

也就是會打印 effect1、effect2、effect1、effect2。

我們測試下:

圖片

打印了 effect1、effet2 這是對的,但第三次打印的是 effect2,這說明 obj.a 修改后并沒有執(zhí)行外層函數(shù),而是執(zhí)行的內(nèi)層函數(shù)。

為什么呢?

看下這段代碼:

圖片

我們執(zhí)行 effect 的時候,會把它賦值給一個全局變量 activeEffect,然后后面收集依賴就用的這個。

當嵌套 effect 的時候,內(nèi)層函數(shù)執(zhí)行后會修改 activeEffect 這樣收集到的依賴就不對了。

怎么辦呢?

嵌套的話加一個棧來記錄 effect 不就行了?

也就是這樣:

圖片

執(zhí)行 effect 函數(shù)前把當前 effectFn 入棧,執(zhí)行完以后出棧,修改 activeEffect 為棧頂?shù)?effectFn。

這樣就保證了收集到的依賴是正確的。

這種思想的應用還是很多的,需要保存和恢復上下文的時候,都是這樣加一個棧。

我們再測試一下:

圖片

現(xiàn)在的打印就對了。

至此,我們的響應式系統(tǒng)就算比較完善了。

全部代碼如下:

const data = {

a: 1,

b: 2

}

let activeEffect

const effectStack = [];

function effect(fn) {

const effectFn = () = {

cleanup(effectFn)

activeEffect = effectFn

effectStack.push(effectFn);

fn()

effectStack.pop();

activeEffect = effectStack[effectStack.length - 1];

}

effectFn.deps = []

effectFn()

}

function cleanup(effectFn) {

for (let i = 0; i effectFn.deps.length; i++) {

const deps = effectFn.deps[i]

deps.delete(effectFn)

}

effectFn.deps.length = 0

}

const reactiveMap = new WeakMap()

const obj = new Proxy(data, {

get(targetObj, key) {

let depsMap = reactiveMap.get(targetObj)

if (!depsMap) {

reactiveMap.set(targetObj, (depsMap = new Map()))

}

let deps = depsMap.get(key)

if (!deps) {

depsMap.set(key, (deps = new Set()))

}

deps.add(activeEffect)

activeEffect.deps.push(deps);

return targetObj[key]

},

set(targetObj, key, newVal) {

targetObj[key] = newVal

const depsMap = reactiveMap.get(targetObj)

if (!depsMap) return

const effects = depsMap.get(key)

// effects effects.forEach(fn = fn())

const effectsToRun = new Set(effects);

effectsToRun.forEach(effectFn = effectFn());

}

})

總結(jié)

響應式就是數(shù)據(jù)變化的時候做一系列聯(lián)動的處理。

核心是這樣一個數(shù)據(jù)結(jié)構(gòu):

圖片

最外層是 WeakMap,key 為對象,value 為響應式的 Map。這樣當對象銷毀時,Map 也會銷毀。

Map 里保存了每個 key 的依賴集合,用 Set 組織。

我們通過 Proxy 來完成自動的依賴收集,也就是添加 effect 到對應 key 的 deps 的集合里。set 的時候觸發(fā)所有的 effect 函數(shù)執(zhí)行。

這就是基本的響應式系統(tǒng)。

但是還不夠完善,每次執(zhí)行 effect 前要從上次添加到的 deps 集合中刪掉它,然后重新收集依賴。這樣可以避免因為分支切換產(chǎn)生的無效依賴。

并且執(zhí)行 deps 中的 effect 前要創(chuàng)建一個新的 Set 來執(zhí)行,避免 add、delete 循環(huán)起來。

此外,為了支持嵌套 effect,需要在執(zhí)行 effect 之前把它推到棧里,然后執(zhí)行完出棧。

解決了這幾個問題之后,就是一個完善的 Vue 響應式系統(tǒng)了。

當然,現(xiàn)在雖然功能是完善的,但是沒有實現(xiàn) computed、watch 等功能,之后再實現(xiàn)。

最后,再來看一下這個數(shù)據(jù)結(jié)構(gòu),理解了它就理解了 vue 響應式的核心:

圖片

vue響應式原理是什么?

當一個vue實例加載時,會進行初始化,將他的配置項options和mixins的內(nèi)容合并,以options為主,而在初始化data時,會對data對象進行數(shù)據(jù)劫持,并做代理,通過Object。

definproperty劫持數(shù)據(jù)后vue會查找當前屬性有無依賴項既被watch,或者依賴當前屬性的值,如果有,就會注冊依賴既deps,而注冊deps時會在wather內(nèi)添加新的更新目標。

當數(shù)據(jù)發(fā)生變更時,會觸發(fā)deps的更新方法,調(diào)用所有的watcher,watcher又會觸發(fā)對應deps的更新,直到所有依賴項更新完畢。

擴展資料:

Vue 是一個 MVVM框架,核心是雙向數(shù)據(jù)綁定,VM(視圖模型)是作為V(視圖)和M(模型)的橋梁。對Vue響應式(雙向數(shù)據(jù)綁定)的理解,如果錯誤盡請指出,一起交流,共同進步。Vue響應式原理核心是 數(shù)據(jù)劫持,采用 ES5 的 object.defineproperty 的 getter 和 setter 方法。

Vue.js 最顯著的一個功能是響應系統(tǒng) —— 模型只是普通對象,修改它則更新視圖。這讓狀態(tài)管理非常簡單且直觀,不過理解它的原理也很重要,可以避免一些常見問題。下面我們開始深挖 Vue.js 響應系統(tǒng)的底層細節(jié)。

參考資料來源:百度百科-Vue·js前端開發(fā)技術(shù)

關(guān)于vue3響應式原理代理與反射和vue3 響應式原理的介紹到此就結(jié)束了,不知道你從中找到你需要的信息了嗎 ?如果你還想了解更多這方面的信息,記得收藏關(guān)注本站。

掃描二維碼推送至手機訪問。

版權(quán)聲明:本文由飛速云SEO網(wǎng)絡(luò)優(yōu)化推廣發(fā)布,如需轉(zhuǎn)載請注明出處。

本文鏈接:http://www.atlasseeker.com/post/4439.html

“vue3響應式原理代理與反射(vue3 響應式原理)” 的相關(guān)文章

saas軟件開發(fā)(saas軟件開發(fā)教程)

saas軟件開發(fā)(saas軟件開發(fā)教程)

今天給各位分享saas軟件開發(fā)的知識,其中也會對saas軟件開發(fā)教程進行解釋,如果能碰巧解決你現(xiàn)在面臨的問題,別忘了關(guān)注本站,現(xiàn)在開始吧!本文目錄一覽: 1、對企業(yè)來說,SAAS的優(yōu)點在于哪些方面? 2、delphi可以開發(fā)saas軟件嗎 3、軟件定制開發(fā)、模板軟件、SAAS系統(tǒng)三者的區(qū)別及...

python網(wǎng)站開發(fā)模板(python 網(wǎng)站框架)

python網(wǎng)站開發(fā)模板(python 網(wǎng)站框架)

本篇文章給大家談談python網(wǎng)站開發(fā)模板,以及python 網(wǎng)站框架對應的知識點,希望對各位有所幫助,不要忘了收藏本站喔。 本文目錄一覽: 1、python web開發(fā) 該用什么框架 2、使用python創(chuàng)建web靜態(tài)網(wǎng)站 3、怎么用python簡單的制作一個網(wǎng)頁 4、Python 有...

尋寶天行完美世界交易平臺手機游戲(尋寶天行完美世界站)

尋寶天行完美世界交易平臺手機游戲(尋寶天行完美世界站)

今天給各位分享尋寶天行完美世界交易平臺手機游戲的知識,其中也會對尋寶天行完美世界站進行解釋,如果能碰巧解決你現(xiàn)在面臨的問題,別忘了關(guān)注本站,現(xiàn)在開始吧!本文目錄一覽: 1、尋寶天行購買完美世界國際板游戲角色問題 2、關(guān)于完美世界國際版尋寶網(wǎng)角色交易的問題、 3、完美世界國際版尋寶網(wǎng)天行購買角...

網(wǎng)易云音樂接口api源碼(網(wǎng)易云音樂api接口解析)

網(wǎng)易云音樂接口api源碼(網(wǎng)易云音樂api接口解析)

本篇文章給大家談談網(wǎng)易云音樂接口api源碼,以及網(wǎng)易云音樂api接口解析對應的知識點,希望對各位有所幫助,不要忘了收藏本站喔。 本文目錄一覽: 1、網(wǎng)易云怎樣上傳翻唱歌曲 2、網(wǎng)易云怎么下載音樂到u盤 3、網(wǎng)易云音樂android鎖屏功能是怎么做出來的 網(wǎng)易云怎樣上傳翻唱歌曲 ;?????...

益盟操盤手操盤線指標源碼(益盟操盤手超級資金指標源碼)

益盟操盤手操盤線指標源碼(益盟操盤手超級資金指標源碼)

本篇文章給大家談談益盟操盤手操盤線指標源碼,以及益盟操盤手超級資金指標源碼對應的知識點,希望對各位有所幫助,不要忘了收藏本站喔。 本文目錄一覽: 1、求益盟操盤手軟件里的“資金流變”指標源碼 (只要益盟操盤手的本軟件源碼) 2、求益盟操盤手操盤線工作原理? 3、益盟操盤手編輯保存的公式,如何...

怎樣看懂心電圖波形(怎么看心電圖的波形)

怎樣看懂心電圖波形(怎么看心電圖的波形)

今天給各位分享怎樣看懂心電圖波形的知識,其中也會對怎么看心電圖的波形進行解釋,如果能碰巧解決你現(xiàn)在面臨的問題,別忘了關(guān)注本站,現(xiàn)在開始吧!本文目錄一覽: 1、心電圖怎么看,心電圖講解,心電圖t波改變 2、怎樣看心電圖曲線 3、心電圖怎么看? 4、心電圖怎么看_怎么看懂心電圖 5、教你...