javascript - Svelte:如何将数据或 Prop 从子组件传递给父组件?

标签 javascript svelte svelte-3 svelte-component

我会尽量简短。
我有主要组件 app.svelte。在其中,我使用了一个名为 Course.svelte 的子组件。我正在使用 {#each} block 多次重复相同的组件。问题是我希望 app.svelte 在单个组件打开时知道:单击。
现在我正在处理 Course.svelte 组件中的 on:click 事件。像这样,App.svelte 永远不会知道它。
我应该怎么办?
Course.svelte 的片段以及我如何处理 on:click 事件:

<script>
  function handleClick() {
    if (state == courseStates.CLOSED) {
      //Handle closed course
    } else {
      if (state === courseStates.READY) {
        passCourse();
      } else if (state === courseStates.PASS) {
        failCourse();
      }
    }
  }
  function passCourse() {
    state = courseStates.PASS;
  }
  function failCourse() {
    state = courseStates.READY;
  }
</script>

<div on:click={handleClick} class="text-center course btn {buttonClass}">
  <h1>{name}</h1>
  <h4>{code} - {credit} Credit Hours - Term {term}</h4>
</div>
App.svelte 的一个片段,我想通过单击类(class)来维护每门类(class)的状态,因为它随着时间的推移而变化:
<div class="row">
    {#each courses as course}
      {#if course.term == term}
        <Course
          state={course.state}
          name={course.name}
          credit={course.credit}
          term={course.term}
          code={course.code}
          on:removecourse={removeCourse} />
      {/if}
    {/each}
  </div>

最佳答案

您可以通过添加 App.svelte bind:state={course.state} 来使用双向数据绑定(bind).现在,如果 Course.svelte 中的值发生更改,App.svelte 中的值将被更新。
这是一个 REPL:
https://svelte.dev/repl/48649794a7144d63bbde67a2db2f67a9?version=3.24.1
有更好的方法来处理这个问题,你应该小心何时使用双向绑定(bind)。使用双向绑定(bind),您将很容易弄乱您的数据流。
处理数据流的更好方法:

  • 将函数从父级传递给子级
  • 将整个数据对象传递给子组件
  • 使用store
  • 使用自定义事件 createEventDispatcher
  • 关于javascript - Svelte:如何将数据或 Prop 从子组件传递给父组件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63696841/

    相关文章:

    sass - 当使用 svelte 和 sass 时,在缩进语法中允许出现 "Error: Semicolons aren' t

    data-binding - 如何使用 Svelte 中动态创建的选项绑定(bind)选择输入的值

    svelte - 我如何将我的事件处理程序作为 $$restProps 传递给子组件

    javascript - 为什么 ajax 请求会忽略 "Set-Cookie" header ?

    javascript - 在 contenteditable div 中收听撤消/重做事件

    javascript - WebSocket 服务器的最佳实践是什么?

    javascript - 如何在循环调用时显示 JS 异步结果?

    javascript - SvelteKit:如何在不使用端点的情况下调用mongodb?

    django - 如何将 Django 与 Svelte 结合使用?

    svelte-3 - Svelte - 通过使用 :action to component child