• 3 svelte-- 反应性


    官网中介绍到:Svelete 的内核是一个强大的 (反应性)reactivity 系统,能够让 DOM 与你的应用程序状态保持同步,例如,事件响应。

    (1)赋值

    1. <script>
    2. let count = 0;
    3. function handleClick() {
    4. count += 1;
    5. }
    6. </script>
    7. <button on:click={handleClick}>
    8. Clicked {count} {count === 1 ? 'time' : 'times'}
    9. </button>

    Svelte 其实是将此赋值语句替换为一些代码,这些代码将通知 Svelte 更新 DOM。这里的count 变量实际上和在Vue中的data变量类似。

    (2)声明

    当组件的状态改变时,Svelte 会自动更新 DOM。通常,组件状态的某些部分需要通过 其它 部分的计算而得出(例如 fullname 就是 firstname 和 lastname 的合体),并在 其它 部分更改时重新计算。

    对于这些,我们提供了反应性声明

    1. let count = 0;
    2. $: doubled = count * 2;
    3. $: console.log(doubled,'val');

    看来其有点陌生,不过别担心。上述是 有效 (非常规)的 JavaScript 语句,Svelte 会将其解释为 “只要参考值变化了就重新运行此代码”。

    我们在 HTML 标签内来使用 doubled

    <p>{count} doubled is {doubled}</p>

    (3)语句

    我们不仅提供了声明反应式的 ,我们还可以运行反应式的 语句。例如,当 count 的值改变时就输出到日志中:

    $: console.log(`the count is ${count}`);

    你可以轻松地将一组语句组合成一个代码块:

    1. $: {
    2. console.log(`the count is ${count}`);
    3. alert(`I SAID THE COUNT IS ${count}`);
    4. }

    你甚至可以将 $: 放在= if 代码块前面:

    1. $: if (count >= 10) {
    2. alert(`count is dangerously high!`);
    3. count = 9;
    4. }

    总结:这里的$: 符号类似于Vue中的wacth和computed监视器和计算属性结合。当doubled 发生变化的时候会执行此行代码

    (4)更新数组和对象

    由于 Svelte 的反应性是由赋值语句触发的,因此使用数组的诸如 push 和 splice 之类的方法就不会触发自动更新。这与Vue中更新变量是不同的。

    解决该问题的一种方法是添加一个多余的赋值语句:

    1. function addNumber() {
    2. numbers.push(numbers.length + 1);
    3. numbers = numbers;
    4. }

    但还有一个更惯用的解决方案:

    1. function addNumber() {
    2. numbers = [...numbers, numbers.length + 1];
    3. }

    你可以使用类似的模式来替换 popshiftunshift 和 splice 方法。

    赋值给数组和对象的 属性(properties) (例如,obj.foo += 1 或 array[i] = x)与对值本身进行赋值的方式相同。

    1. function addNumber() {
    2. numbers[numbers.length] = numbers.length + 1;
    3. }

    一个简单的经验法则是:被更新的变量的名称必须出现在赋值语句的左侧。例如下面这个:

    1. const foo = obj.foo;
    2. foo.bar = 'baz';

  • 相关阅读:
    SpringBoot 使用 Feign 无废话 All-in-one 指南
    io_uring 之 liburing 的简单使用
    牛客练习赛105 D.点分治分点(spfa&bfs)
    多线程会遇到的问题与解决方法
    在线协作文档哪家强?微软 Loop 、Notion、FlowUs
    C#:初识结构体、数组、冒泡排序。
    编译python(cpython)的源码及其用途
    OpenCV图像处理——数字图像处理基本操作
    从零开始:使用ChatGPT快速创作引人入胜的博客内容
    数据结构学习笔记(Ⅳ):串
  • 原文地址:https://blog.csdn.net/weixin_44948981/article/details/134267122