我正在使用这个库 (https://github.com/satya164/react-native-tab-view) 创建一个选项卡式视图,其中每个选项卡代表一个类别并呈现带有复选框的设备列表以选择/取消选择它们。由于其中一些类别重叠,父组件必须跟踪 selectedDevices
,因此当您在选项卡之间切换时,下一个选项卡将受到前一个选项卡中所做选择的影响。
这不会是一个问题,除了每个选项卡基本上是一个 ScrollView
的事实,因此最重要的是,每次您进行选择时,它都不会卸载和重新安装,从而丢失滚动位置.
TabView
有一个 renderScene
道具,它允许我渲染各种屏幕。如果我通过 selectedDevices
中的 prop 传递 renderScene
,它将表现得像一个工厂,基本上每次 selectedDevices
更改时都会创建一个新的 React 元素,从而触发重新安装。
如果有一种方法可以仅在屏幕即将更改时设置所选设备(因为用户点击另一个选项卡或滑动到它),那就足够了,因为尽管重新安装不会影响滚动位置,但使用 useEffect
清理功能设置所选设备将没有任何用处,因为更改选项卡不会卸载组件。
我想到的唯一解决方案是创建一个新的 Context
并使用它在各种标签屏幕之间共享 selectedDevices
。这非常有效,完全避免了任何类型的重新安装,但不知何故我不喜欢它,因为它感觉像是一个糟糕的设计。
你能想到更好的解决方案吗?