【Svelte】-(2)reactivity响应式 | 赋值 / reactivity变量 / reactivity代码语句 / reactivity对象

简介: 【Svelte】-(2)reactivity响应式 | 赋值 / reactivity变量 / reactivity代码语句 / reactivity对象

reactivity 于 Svelte (赋值)


reactivity 系统 即反应性或者响应式。


在Vue中是 ref 或者 reactive ,在React中是 useState 。

在Svelte中则十分简洁,终于可以摆脱Hooks了(虽然我也很爱Hooks)


Svelte 的内核是一个强大的 reactivity 系统,能够让 DOM 与你的应用程序状态保持同步,例如,事件响应。


就像这行代码

<button on:click={increment()}></button>

在 increment 函数内部,我们需要做的只是改变 count 的值:

<script>
  let count = 1
  const increment = () => count+=1
</script>
<button on:click={increment}>
  Clicked {count}
</button>

0000.gif

Svelte 用一些工具代码就能知道 DOM 需要更新。


声明reactivity变量


Svelte 的 reactivity 不仅使 DOM 与应用程序的变量保持同步,它还可以使用 reactivity 声明使变量彼此保持同步。


通过这种方法,只要参考值变化了就重新运行此代码

$: isOdd = count % 2 === 1;

虽然看着怪,但其实习惯就好,毕竟语法就是得习惯… , 比起用 computer / watch 又或者是写Hooks,其实我还蛮喜欢的,停不下。


<script>
  let count = 0
  $: isOdd = count % 2 === 1
  const increment = () => count++
</script>
<button on:click={increment}>
  Clicked {count} is {isOdd ? 'odd' : 'even'}
</button>

1111.gif

reactivity代码语句

Svelte不限于声明响应式值,可以响应式地运行任意语句。


例如,我们可以在count它发生变化时记录它的值:

<script>
  let count = 0
  $: isOdd = count % 2 === 1
  const increment = () => count++
  $: console.log('count', count)
</script>
<button on:click={increment}>
  Clicked {count} is {isOdd ? 'odd' : 'even'}
</button>

111.gif

其实怎么写倒是无所谓,$: 后面加语句快就好,直接添加或者当函数$: {} 都行,其实各框架实现响应式原理差不多,之所以Svelte这么独特就取决于,我认为它更像编译器,而不是语言框架或者js库。



reactivity对象


不过我认为语法有点冗余的是,在更新对象的时候需要重新赋值,当然之所以这么设计肯定是有理由的。

例如你需要这样写

<script>
  let arr = {
    value: [0]
  }
  function add() {
    arr.value.push(1)
    arr = arr // !! 重新赋值
  }
</script>


或者这样

<script>
  let arr = {
    value: [0]
  }
  function add() {
    arr = [...arr, 1]
  }
</script>


你必须对整个对象重新赋值才会生效,如pop,shift和 ,splice以及对象方法,如Map.set,Set.add等都需要使用后重新赋值才具备响应式。


目录
相关文章
|
7月前
|
JavaScript
Vue中的mixins和extend的区别是什么?
Vue中的mixins和extend的区别是什么?
106 0
|
3月前
|
JavaScript
Vue2.x和Vue3.x v-for中还可以这样解构赋值
本文介绍了在Vue 2.x和Vue 3.x中使用`v-for`指令时,如何通过对对象进行解构赋值来简化模板中的代码,并通过实例展示了在`data`中的熟悉如何通过解构来请求接口的值。
48 0
Vue2.x和Vue3.x v-for中还可以这样解构赋值
|
2月前
快速掌握 Svelte 的 Render 函数
【10月更文挑战第4天】
33 0
|
4月前
|
JavaScript 前端开发 API
Vue3 中 setup 语法糖做了哪些骚操作?
Vue3 中 setup 语法糖做了哪些骚操作?
|
5月前
|
JavaScript 前端开发
前端框架原理自测题:根据 JSX / Vue 模板写出 render 函数 / VNode
前端框架原理自测题:根据 JSX / Vue 模板写出 render 函数 / VNode
28 0
|
5月前
|
存储 JavaScript 前端开发
vue3【实用教程】声明响应式状态(含ref,reactive,toRef(),toRefs() 等)
vue3【实用教程】声明响应式状态(含ref,reactive,toRef(),toRefs() 等)
120 0
|
7月前
|
JavaScript
vue中setup语法糖的优点
vue中setup语法糖的优点
|
7月前
Vue3的reactive、ref、toRef、toRefs用法以及区别
Vue3的reactive、ref、toRef、toRefs用法以及区别
118 0
|
7月前
|
JavaScript
(详细及解决方法)关于Vue.prototype中定义的变量不是响应式
(详细及解决方法)关于Vue.prototype中定义的变量不是响应式
162 0
|
JavaScript API
vue生命周期的传统写法和setup语法糖写法
vue生命周期的传统写法和setup语法糖写法
138 0