ref的使用

ref關(guān)鍵字使參數(shù)按引用傳遞

其效果是,當(dāng)控制權(quán)傳遞回調(diào)用方法時(shí),在方法中對(duì)參數(shù)所做的任何更改都將反映在該變量中。若要使用ref參數(shù),則方法定義和調(diào)用方法都必須顯式使用ref關(guān)鍵字。ref是 Reference的縮寫(xiě)。
中文名 ref 外文名 ref 用 途 C#中關(guān)鍵字通過(guò)引用傳遞參數(shù) 引用方法 顯式使用
例如:

class RefExample {
  static void Method(ref int i) {
    i=44;
   }
  static void Main() {
  int val=0;
  Method(ref val);
  //val is now 44
  }
}

傳遞到ref參數(shù)的參數(shù)必須最先初始化

這與 out 不同,out 的參數(shù)在傳遞之前不需要顯式初始化。盡管ref和out在運(yùn)行時(shí)的處理方式不同,但它們?cè)诰幾g時(shí)的處理方式是相同的。因此,如果一個(gè)方法采用ref參數(shù),而另一個(gè)方法采用out 參數(shù),則無(wú)法重載這兩個(gè)方法。
注意:屬性不是變量,因此不能作為ref參數(shù)傳遞。
ref和out兩個(gè)參數(shù)的不同在于:
1、ref傳進(jìn)去的參數(shù)必須在調(diào)用前初始化,out不必,即:

int i;
SomeMethod(ref i);//語(yǔ)法錯(cuò)誤
SomeMethod(out i);//通過(guò)

2、ref傳進(jìn)去的參數(shù)在函數(shù)內(nèi)部可以直接使用,而out不可:

public void SomeMethod(ref int i) {
  int j=i;//通過(guò)
  //...
}
public void SomeMethod(out int i) {
  int j=i;//語(yǔ)法錯(cuò)誤
}

3、ref傳進(jìn)去的參數(shù)在函數(shù)內(nèi)部可以不被修改,但out必須在離開(kāi)函數(shù)體前進(jìn)行賦值。

ref 被用來(lái)給元素或子組件注冊(cè)引用信息

引用信息將會(huì)注冊(cè)在父組件的 $refs 對(duì)象上。如果在普通的 DOM 元素上使用,引用指向的就是 DOM 元素; 如果用在子組件上,引用就指向組件實(shí)例:

<!-- vm.$refs.p will be the DOM node -->
<p ref="p">hello</p>
<!-- vm.$refs.child will be the child comp instance -->
<child-comp ref="child"></child-comp>

當(dāng) v-for 用于元素或組件的時(shí)候,引用信息將是包含 DOM 節(jié)點(diǎn)或組件實(shí)例的數(shù)組。

關(guān)于ref注冊(cè)時(shí)間的重要說(shuō)明: 因?yàn)閞ef本身是作為渲染結(jié)果被創(chuàng)建的,在初始渲染的時(shí)候你不能訪問(wèn)它們 - 它們還不存在!$refs 也不是響應(yīng)式的,因此你不應(yīng)該試圖用它在模版中做數(shù)據(jù)綁定。

子組件索引
盡管有 props 和 events ,但是有時(shí)仍然需要在 JavaScript 中直接訪問(wèn)子組件。為此可以使用 ref
為子組件指定一個(gè)索引 ID 。例如:

<div id="parent">
<user-profile ref="profile"></user-profile>
</div>

var parent = new Vue({ el: '#parent' })
// 訪問(wèn)子組件
var child = parent.$refs.profile

當(dāng) ref和 v-for 一起使用時(shí), ref 是一個(gè)數(shù)組或?qū)ο?,包含相?yīng)的子組件。
$refs只在組件渲染完成后才填充,并且它是非響應(yīng)式的。它僅僅作為一個(gè)直接訪問(wèn)子組件的應(yīng)急方案——應(yīng)當(dāng)避免在模版或計(jì)算屬性中使用 $refs。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容