【问题标题】:Svelte is not updating transitive dependencySvelte 没有更新传递依赖
【发布时间】:2022-09-30 20:41:45
【问题描述】:

在我的组件中,我有 3 个变量,其中 value2 取决于 value1value3 取决于 value2。当我更新 value1 时,value2 会更新,但 value3 保持不变。我是 Svelte 的新手。这种行为是否记录在案?

游乐场:https://svelte.dev/repl/c092a060a12641489d81e2c5857473bf?version=3.50.1

<script>
    let value1 = 0;
    let value2 = 0;
    let value3 = 0;
    
    function updateValue3(value) {
        value3 = value;
    }
    
    $: updateValue3(value2);
    
    function updateValue2(value) {
// uncomment this to make it working
//      setTimeout(() => {
//          value2 = value;
//      });
        
        value2 = value;
    }

    $: updateValue2(value1);
</script>

<button on:click={() => value1++}>increment</button>
<h1>value1: {value1}, value2: {value2}, value3: {value3}</h1>

    标签: svelte


    【解决方案1】:

    您可以通过对响应式语句进行不同的排序来修复它,尽管 Svelte 应该自动进行排序:

    $: updateValue2(value1);
    $: updateValue3(value2);
    

    REPL

    【讨论】:

      【解决方案2】:

      刚刚用以下更新了你的游乐场。它有效,我想你可以找出区别。

      <script>
          let value1 = 0;
          let value2 = 0;
          let value3 = 0;
          
          function updateValue3(value) {
              value3 = value;
          }
          
          function updateValue2(value) {
              value2 = value;
          }
      
          $: {
              updateValue2(value1);
              updateValue3(value2);
          }
      </script>
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2019-10-31
        • 1970-01-01
        • 1970-01-01
        • 2018-07-06
        • 2016-05-13
        • 2021-10-21
        相关资源
        最近更新 更多