Лучший способ разделить состояние между реквизитами рендеринга на вкладке-просмотр без перемонтажа компонентов при изменении состояния

#javascript #reactjs #react-native #user-interface #design-patterns

Вопрос:

Я использую эту библиотеку (https://github.com/satya164/react-native-tab-view) для создания представления с вкладками, где каждая вкладка представляет категорию и отображает список устройств с флажком для их выбора/отмены выбора. Поскольку некоторые из этих категорий перекрываются , родительский компонент должен отслеживать selectedDevices , чтобы при переключении между вкладками на следующую из них повлиял выбор, сделанный в предыдущих. Это не было бы проблемой, за исключением того факта, что каждая вкладка в основном является a ScrollView , и поэтому крайне важно, чтобы каждый раз, когда вы делаете выбор, она не размонтировалась и не перемонтировалась, теряя позицию прокрутки.

TabView имеет renderScene реквизит, который позволяет мне отображать различные экраны. Если я пройду selectedDevices через подставку, renderScene она будет вести себя как фабрика, в основном создавая новый элемент React каждый раз selectedDevices , когда он меняется, и, таким образом, запускает повторное монтирование.

Если есть способ, чтобы установить выбранные устройства только тогда, когда экран изменится (потому что пользователь нажал на другую вкладку или украсть, чтобы оно) что будет достаточно хорошим, потому что, несмотря на перемонтировать, что не влияет на положения прокрутки, но используя useEffect очистку функцию, чтобы установить некоторые устройства не будет никакой пользы, потому что изменение разделе не размонтировать компонент.

Единственное решение, о котором я подумал, — это создать новый Context и использовать его для совместного selectedDevices использования между различными экранами вкладок. Это работает очень хорошо, полностью избегая какого-либо перемонтажа, но мне почему-то не нравится, потому что это похоже на плохой дизайн.

Можете ли вы придумать какое-нибудь лучшее решение?