在选项卡视图渲染道具之间共享状态的最佳方法,而无需在状态更改时重新安装组件

时间:2021-07-30 20:35:22

标签: javascript reactjs react-native user-interface design-patterns

我正在使用这个库 (https://github.com/satya164/react-native-tab-view) 创建一个选项卡式视图,其中每个选项卡代表一个类别并呈现带有复选框的设备列表以选择/取消选择它们。由于其中一些类别重叠,父组件必须跟踪 selectedDevices,因此当您在选项卡之间切换时,下一个选项卡将受到前一个选项卡中所做选择的影响。 这不会是一个问题,除了每个选项卡基本上是一个 ScrollView 的事实,因此最重要的是,每次您进行选择时,它都不会卸载和重新安装,从而丢失滚动位置.

TabView 有一个 renderScene 道具,它允许我渲染各种屏幕。如果我通过 selectedDevices 中的 prop 传递 renderScene,它将表现得像一个工厂,基本上每次 selectedDevices 更改时都会创建一个新的 React 元素,从而触发重新安装。

如果有一种方法可以仅在屏幕即将更改时设置所选设备(因为用户点击另一个选项卡或滑动到它),那就足够了,因为尽管重新安装不会影响滚动位置,但使用 useEffect 清理功能设置所选设备将没有任何用处,因为更改选项卡不会卸载组件。

我想到的唯一解决方案是创建一个新的 Context 并使用它在各种标签屏幕之间共享 selectedDevices。这非常有效,完全避免了任何类型的重新安装,但不知何故我不喜欢它,因为它感觉像是一个糟糕的设计。

你能想到更好的解决方案吗?

0 个答案:

没有答案
相关问题