如何在按钮单击时添加另一个组件

HowTo add another component on button click

我正在创建数据条目 table。我希望在单击 AddRow 按钮时向 table 添加一个新行。

我的结构是一个 <DataEntryForm> 组件,具有 <FormHeader> 个子组件和一个或多个 <FormRow> 个子组件。

这是我的第一次新手尝试:

let numRows = [1,1,1,1,1,1,1];

<div class='efContainer'>
   <FormHeader />
   {#each numRows as num}
      <FormRow />
   {/each}
</div>

<Button on:click={() => numRows.push(1)}>Add Row</Button>

在初始 运行 时,根据 numRows 数组初始值的长度指定创建了 7 行。

但是,单击 AddRow 按钮什么都不做 (控制台日志记录显示数组正在正确更新。当然,没有任何内容告诉 #each 循环重新运行.)

  1. 应如何重构此应用程序以使 AddRows 按钮起作用?

  2. numRows 数组似乎是管理创建新行的笨拙方法。有没有更 Sveltic 的方法来做到这一点?

更新数组和对象可以参考Svelte教程:https://svelte.dev/tutorial/updating-arrays-and-objects

因为 numRows.push(1) 从不更新 numRows 的值,Svelte 不会检测到更改。一个简单的解决方法是将 on:click={() => numRows.push(1)} 替换为 on:click={updateArray},其中 updateArray = () => {numRows = [...numRows, 1]}