React Native - состояние redux обновляется, но панель вкладок - нет

Я пытаюсь реализовать темный режим для своего приложения. Я использую управление состоянием redux, чтобы сохранить текущую тему.

Я использую функцию redux connect в своих компонентах, чтобы получить эту тему и визуализировать компоненты в светлом или темном режиме. Это работает довольно хорошо, но, к сожалению, у меня проблемы с панелью BottomTabbar.

Я использую функциональный компонент настраиваемой панели вкладок, где я получаю текущее состояние редукции. Я также попытался подключить свой AnimatedCircleBarComponent к состоянию редукции (таким образом, связав его с моим компонентом класса), но результат был таким же.

const MaterialTopTabBar = props => {
 const Colors = useSelector(state => state.themeReducer.theme);

 return (
   <AnimatedCircleBarComponent
     {...props}
     style={{
       backgroundColor: Colors.tabbar,
     }}
     activeTintColor={Colors.icon}
     inactiveTintColor={Colors.icon}
     fillColor={Colors.tabbar}
     activeBackgroundColor={Colors.iconActive}
     // indicatorStyle={styles.indicatorStyle}
     // style={styles.root}
   />
 );
};

Вот мой навигатор:

const MainTab = createMaterialTopTabNavigator(
  {
    Home: {
      screen: HomeScreen,
      navigationOptions: ({screenProps}) => {
        return {
          tabBarLabel: () => <Text></Text>,
          tabBarIcon: ({tintColor, focused}) => (
            <Icon
              size={28}
              name={focused ? 'home' : 'home-outline'}
              style={
                focused
                  ? {color: screenProps.Colors.textWhite}
                  : {color: screenProps.Colors.icon, top: 6}
              }
            />
          ),
        };
      },
    },

    Restaurants: {
      screen: RestaurantScreen,
      navigationOptions: ({screenProps}) => {
        return {
          tabBarLabel: () => <Text></Text>,
          tabBarIcon: ({tintColor, focused}) => (
            <Icon
              size={28}
              name={focused ? 'format-list-checkbox' : 'format-list-checkbox'}
              style={
                focused
                  ? {color: screenProps.Colors.textWhite}
                  : {color: screenProps.Colors.icon, top: 6}
              }
            />
          ),
        };
      },
    },
  },
  {
    tabBarComponent: MaterialTopTabBar,
    tabBarPosition: 'bottom',
    optimizationsEnabled: true,
    swipeEnabled: false,
    initialRouteName: 'Home',
  },
);

Компонент панели вкладок получает новое состояние, но не выполняет повторную визуализацию. Он только перерисовывает и меняет цвета на новые после нажатия на новой вкладке.

Можно ли принудительно перерисовать панель вкладок или почему это не работает? Все остальные компоненты на моем экране обновляются правильно.

Я думаю, что это довольно распространенный вариант использования, не так ли?


person user42932    schedule 25.11.2020    source источник


Ответы (1)


Я нашел проблему. Приведенный выше код работает как шарм, моя проблема заключалась в моем компоненте Custom tab bar.

У него есть метод ShouldComponentUpdate, который отклонил обновление. Я настроил этот метод, и теперь он работает.

Надеюсь, я смогу помочь кому-нибудь с этой информацией.

person user42932    schedule 26.11.2020