在 Svelte 中将事件从孩子发送给祖父母

Gh0*_*05d 1 javascript events event-handling svelte

我的应用程序的结构如下:

  • 祖父母是一种形式
  • Parent 是调用 api 的输入
  • Child 显示 api 调用的结果

在子组件中,我想将数据传递给祖父母,具体取决于用户单击的结果。我尝试使用事件调度程序来执行此操作。不幸的是,这失败了,因为似乎沟通只能在父母和孩子之间进行。有办法做到这一点吗?

这是我的(简化的)代码:

// Grandparent
  <form on:submit|preventDefault={handleSubmit}>
    <Search bind:item={item} on:result={e => console.log(e)} />
  </form>

// Parent
   <div class="search-results">
      <Response data={res} />
   </div>

// Child
  <script>
    function returnData(data) {
      dispatch("result", data);
    }
  </script>

  <button on:click={() => returnData(data)}>Click</button>
Run Code Online (Sandbox Code Playgroud)

dum*_*umm 6

on:<eventName>之后您可以在不使用任何事件处理程序的情况下使用冒泡事件:

// Grandparent
  <form on:submit|preventDefault={handleSubmit}>
    <Search bind:item={item} on:result={e => console.log(e)} />
  </form>

// Parent
   <div class="search-results">
      <!-- only this line changes in your code:
           bubble the result event -->
      <Response data={res} on:result />
   </div>

// Child
  <script>
    function returnData(data) {
      dispatch("result", data);
    }
  </script>

  <button on:click={() => returnData(data)}>Click</button>
Run Code Online (Sandbox Code Playgroud)

  • @Gh05d `on:result` (没有回调)在父级中, `on:result={() =&gt; { /* 你的代码在这里 */ }}` 在祖级中 (3认同)
  • 所以我需要这里和祖父母中的“on:result”处理程序,或者?那么家长就将事件传递下去吗? (2认同)