Vue 3 中的 ref 與 React ?
P粉743288436
2023-08-27 20:35:30
<p>查看一些人的 Vue 3 預覽教學的一些範例。 [目前處於測試階段]</p>
<p>我找到了兩個例子:</p>
<h2>反應式</h2>
<pre class="brush:js;toolbar:false;"><template>
<button @click="increment">
Count is: {{ state.count }}, double is: {{ state.double }}
</button>
</template>
<script>
import { reactive, computed } 從 'vue'
export default {
setup() {
const state = reactive({
count: 0,
double: computed(() => state.count * 2)
})
function increment() {
state.count
}
return {
state,
increment
}
}
}
</script>
</pre>
<h2>參考</h2>
<pre class="brush:js;toolbar:false;"><template>
<div>
<h2 ref="titleRef">{{ formattedMoney }}</h2>
<input v-model="delta" type="number">
<button @click="add">Add</button>
</div>
</template>
<script>
import { ref, computed, onMounted } from "vue";
export default {
setup(props) {
// State
const money = ref(1);
const delta = ref(1);
// Refs
const titleRef = ref(null);
// Computed props
const formattedMoney = computed(() => money.value.toFixed(2));
// Hooks
onMounted(() => {
console.log("titleRef", titleRef.value);
});
// Methods
const add = () => (money.value = Number(delta.value));
return {
delta,
money,
titleRef,
formattedMoney,
add
};
}
};
</script>
</pre>
<p><br /></p>
ref
和reactive
之間有一些相似之處,因為它們都提供了一種儲存資料並允許資料回應的方法。但是:
高水準差異:
#來源:Vue 論壇討論
反應式
#reactive
取得物件並向原始物件傳回一個回應式代理
。範例
說明
在上面,每當我們想要更改或存取
page
的屬性時,比如說
page.ads
,page.filteredAds
將透過代理程式更新。要點
reactive()
只接受對象,不 JS 基元(String、Boolean、Number、BigInt、Symbol、null、undefined)ref()
正在幕後呼叫reactive()
reactive()
適用於對象,且ref()
呼叫reactive()
,因此物件適用於兩者ref()
有一個用於重新指派的.value
屬性,reactive()
沒有這個屬性,因此無法重新指派使用
ref()
當..'string'
、true
、23
等)reactive()
當..ref()
的開銷總結
ref()
似乎是可行的方法,因為它支援所有物件類型並允許使用.value
重新分配。ref()
是一個很好的起點,但是當您習慣了該API 後,您就會知道reactive()
的開銷更少,並且您可能會發現它更能滿足您的需求需求。ref()
使用案例對於基元,您將始終使用
ref()
,但ref()
對於需要重新指派的物件(例如陣列)很有用。上面的
reactive()
需要重新指派一個屬性而不是整個物件。reactive()
使用案例reactive() 的一個很好的用例是一組屬於在一起的原語:
上面的程式碼感覺比上面的程式碼更符合邏輯
有用的連結
如果您仍然迷失方向,這個簡單的指南對我有幫助:https://www.danvega.dev/blog/2020/02/12/vue3-ref-vs-reactive/
只使用
ref()
的論點:https://dev.to/ycmjason/thought-on-vue-3-composition-api-reactive-considered-harmful-j8c
#reactive()
和ref()
存在背後的決策以及其他重要信息,Vue Composition API RFC:https://vuejs.org/guide/extras /composition-api-faq。 html#why-composition-api