代码之家  ›  专栏  ›  技术社区  ›  DoHn

苗条衍生存储何时会导致重新渲染?

  •  1
  • DoHn  · 技术社区  · 2 年前

    如果与这样的商店打交道:

    {
      "count": 0,
      "items": []
    }
    

    并且有两个派生存储( $countStore $itemsStore )返回相应字段,更新 items 在主存储上不会导致在仅依赖于 countStore ,但正在更新 count 确实会导致仅依赖于 itemsStore ,这到底是为什么?

    Here's a REPL 显示此行为。

    1 回复  |  直到 2 年前
        1
  •  2
  •   brunnerh    2 年前

    Svelte使用一个名为 safe_not_equal 检查某个值是否可能发生变化;这不是派生存储所独有的。 derived 使用 readable 内部存储,在设置其值时进行检查。

    export function safe_not_equal(a, b) {
        return a != a ? b == b : a !== b || ((a && typeof a === 'object') || typeof a === 'function');
    }
    

    是的,非原始值被认为是不同的,因为它们可能在内部发生了变化。Svelte已经优化了更新,只对DOM进行了最小的更新,所以我不会担心这一点,除非它真的成为问题。对于数组,应使用键控 {#each}

    推荐文章