正确的 React-ful 方式来处理父组件中的函数,该函数只会作用于选定的子组件?
Proper React-ful way to handle a function in a parent component that will only act on selected child components?
因此,为了在一定程度上简化它,我有两个 React 组件,一个是另一个的子组件。假设它们是 ItemTable 和 ItemRow。 ItemTable 有很多 ItemRow。 ItemTable 被调用并接收一个项目数组。对于此数组中的每个项目,都会在 ItemTable 中创建一个 ItemRow。我希望能够 select 特定的 ItemRows,每个 ItemRows 都绑定到一个项目,并在 ItemTable 级别对每个 selected 项目执行一个特定的操作。我在 selection 的每一行都有一个复选框,在 ItemTable 中有一个按钮开始对每个 selected 项目执行操作。我可以想到两种方法,但我不确定在 React 中 'proper' 是哪种方法。
选项 1:在 ItemTable 状态下初始化一个空数组。每次选中 ItemRow 中的复选框时,它都会调用从父 ItemTable 状态传递下来的句柄函数,该函数将其添加到 ItemTables 数组或从中删除。换句话说,在 ItemTable 级别跟踪要操作的项目列表,然后当单击处理操作的按钮时,它会解析数组并对每个项目执行操作。
选项 2:在创建时在 LicenseRow 级别将变量初始化为 false。选中后,它将 LicenseRow 的状态更改为 true。未选中时为假。当 LicenseTable 级别的按钮被选中时,它会转到每个子项,如果它被标记为 true(选中),则处理该项目。
我将继续前进,我认为这是更好的方法。我知道 React 是自上而下的数据流,所以我倾向于选项 2,但我觉得管理子项列表应该是父项的工作。我不确定这两种方式是否一定 'wrong',但在您看来,处理这些项目的更好方式是什么?
这两种策略都是有效的,这里没有正确或错误的答案。根据我的经验,选项 1 是更常见的方法。
与选项 2 相比,它还有一些其他好处:
- 总的来说,我发现它更容易设置和调试(我相信您需要使用
ref
来访问子项上的任何内容)。
- 在较大的集合上,它会表现得更好,因为它在处理之前已经知道选择了哪些项目。 选项 2 必须枚举整个集合,即使实际上只选择了一项。
- 让父级拥有状态可以让您更轻松地使用它做更多事情。例如,如果没有选择要处理的项目,您可以禁用该按钮。
I know React is a top-down data flow, and so I'm leaning towards option 2
在我看来,数据仍然只在选项 1 中向下流动。父级决定在触发回调时更改哪些数据并将其向下传递给子级。
最终选择权在你,祝你好运。 :)
因此,为了在一定程度上简化它,我有两个 React 组件,一个是另一个的子组件。假设它们是 ItemTable 和 ItemRow。 ItemTable 有很多 ItemRow。 ItemTable 被调用并接收一个项目数组。对于此数组中的每个项目,都会在 ItemTable 中创建一个 ItemRow。我希望能够 select 特定的 ItemRows,每个 ItemRows 都绑定到一个项目,并在 ItemTable 级别对每个 selected 项目执行一个特定的操作。我在 selection 的每一行都有一个复选框,在 ItemTable 中有一个按钮开始对每个 selected 项目执行操作。我可以想到两种方法,但我不确定在 React 中 'proper' 是哪种方法。
选项 1:在 ItemTable 状态下初始化一个空数组。每次选中 ItemRow 中的复选框时,它都会调用从父 ItemTable 状态传递下来的句柄函数,该函数将其添加到 ItemTables 数组或从中删除。换句话说,在 ItemTable 级别跟踪要操作的项目列表,然后当单击处理操作的按钮时,它会解析数组并对每个项目执行操作。
选项 2:在创建时在 LicenseRow 级别将变量初始化为 false。选中后,它将 LicenseRow 的状态更改为 true。未选中时为假。当 LicenseTable 级别的按钮被选中时,它会转到每个子项,如果它被标记为 true(选中),则处理该项目。
我将继续前进,我认为这是更好的方法。我知道 React 是自上而下的数据流,所以我倾向于选项 2,但我觉得管理子项列表应该是父项的工作。我不确定这两种方式是否一定 'wrong',但在您看来,处理这些项目的更好方式是什么?
这两种策略都是有效的,这里没有正确或错误的答案。根据我的经验,选项 1 是更常见的方法。
与选项 2 相比,它还有一些其他好处:
- 总的来说,我发现它更容易设置和调试(我相信您需要使用
ref
来访问子项上的任何内容)。 - 在较大的集合上,它会表现得更好,因为它在处理之前已经知道选择了哪些项目。 选项 2 必须枚举整个集合,即使实际上只选择了一项。
- 让父级拥有状态可以让您更轻松地使用它做更多事情。例如,如果没有选择要处理的项目,您可以禁用该按钮。
I know React is a top-down data flow, and so I'm leaning towards option 2
在我看来,数据仍然只在选项 1 中向下流动。父级决定在触发回调时更改哪些数据并将其向下传递给子级。
最终选择权在你,祝你好运。 :)