Vue 3有两个如前所述 ES6全权的新 Reactivity 。捷伊 Reactivity 与倍受争论的 Composition API 重合,即便 Composition API 容许您采用 Vue 的 Reactivity ,而无须采用 Vue 模块。即使没人谈及采用 Vue 做为后端架构。 这是它的组织工作基本原理。
采用 ref()
Vue 有两个自上而下的 ref()紧紧围绕 JavaScript scripts建立响应式包装袋器的表达式。比如,下列是建立 Reactivity 计时器第一类的方式。
const { ref }= require(vue);const count = ref(0);// RefImpl { rawValue:0, shallow: false, visRef: true, value:0 }console.log(count);++count.value;// RefImpl { rawValue:1, shallow: false, visRef: true, value:1 }console.log(count);
这有甚么有意思的 ref?采用 Vue 的自上而下 watchEffect()机能,您能观赏预览 ref.
const { ref, watchEffect }= require(vue);const count = ref(0);watchEffect(function handler(){ console.log(count.value);});// Prints “1” because Vue knows to call handler() whenever count changes++count.value;
Vue 足够多精明,能认知 ref()codice setup(),因而您能表述化学反应状况而无须表述 data个人财产。比如,即便 counter模块没 data特性,它依然对预览的值作出化学反应 count即便 count是两个参照。
const { createApp, ref }= require(vue);const app = createApp({ template:});app.component(counter,{ // Clicking the button increments the counter, because Vue is smart enough // to understand reactive properties returned from setup() template:
{{count}}
Increment采用 reactive()
Vue 3还引入了两个 reactive()的表达式行为类似 ref(),但对于第一类。 请记住 ref()通常只应用于原始值:数字、字符串、布尔值、BigInts 和符号。
这 reactive()表达式向第一类的特性添加化学反应性。称呼 reactive()在两个第一类上,你会得到两个你能采用的全权第一类 watchEffect().比如,即便 character在下面的例子中是化学反应性的, watchEffect()每次更改时都会打印出角色的名字。
const { reactive, watchEffect }= require(vue);const character = reactive({ name:Jean-Luc Picard});watchEffect(()=>{ console.log(character.name);});// Prints “Locutus of Borg”character.name =Locutus of Borg;
最大的改进 reactive()与视图2 的对比 data特性是 reactive()能在您建立新特性时监听,而不仅仅是访问现有特性。在下面的例子中, watchEffect()足够多精明,能在您建立新特性时接手 age在 character.
const { reactive, watchEffect }= require(vue);const character = reactive({ name:Jean-Luc Picard});watchEffect(()=>{ console.log(character.age);});// Prints “59”character.age =59;
两个陷阱 reactive():它消除了在事件循环的同一刻度上发生的变化。下面的代码将打印61和62,它不会打印59或 60,即便这些更改在61之前同步发生。
const { reactive, watchEffect }= require(vue);const character = reactive({ name:Jean-Luc Picard});watchEffect(()=>{ console.log(character.age);});// Prints “61”character.age =59;character.age =60;character.age =61;// Prints “62”setImmediate(()=>{ character.age =62;});
如果您需要从返回两个第一类特性 setup(),你应该采用 reactive().比如,如果不是简单的 count,你有两个 article有个人财产 pageViews你想增加,你应该包装袋 article第一类在 reactive().
app.component(counter,{ template: