«Должна иметь очередь. Скорее всего, это ошибка в React. Пожалуйста, сообщите о проблеме.» Ошибка React-Native - PullRequest
0 голосов
/ 11 апреля 2020

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

Я часами занимался поиском и устранением неисправностей, и похоже, что онлайн-решения нет.

Из того, что я понял, следующий хук const [isOpen, setIsOpen] = useState(false); вызывает проблему здесь, возможно, из-за порядка хуков. Этот хук используется для переключения меню, которое у меня есть. Однако, когда я пытаюсь перейти на другой экран <TouchableOpacity onPress={() => navigation.navigate('Job')}> (из стека экрана, а не из модального или карточного), приложение разрывается, и я получаю ошибку. Если я закомментирую однолинейный хук const [isOpen, setIsOpen] = useState(false);, навигация будет работать отлично.

Решение будет с благодарностью.

config. js

export const sharedScreenOptions = (props) => {
  const [isOpen, setIsOpen] = useState(false);

  const toggleMenu = () => {
    setIsOpen(!isOpen);
    LayoutAnimation.easeInEaseOut();
  };
  return {
    headerBackTitleVisible: false,

    header: (props) => {
      return (
        <>
          <GradientHeader isOpen={isOpen} {...props} />
          {isOpen ? (
            <TouchableOpacity
              style={{
                height: Dimensions.get('window').height,
                width: Dimensions.get('window').width,
                backgroundColor: 'rgba(42, 44, 65, 0.5)',
                position: 'absolute',
                zIndex: -999,
              }}
              onPress={() => toggleMenu()}></TouchableOpacity>
          ) : null}
        </>
      );
    },
    headerRight: () => {
      return (
        <View style={styles.iconContainer}>
          <TouchableOpacity onPress={() => navigation.navigate('Job')}>
            <MailButton navigation={props.navigation} />
          </TouchableOpacity>
          <NotificationButton navigation={props.navigation} />
          <TouchableOpacity onPress={() => toggleMenu()}>
            {isOpen ? <CloseButton /> : <HamburgerButton />}
          </TouchableOpacity>
        </View>
      );
    },
    headerStyle: {
      backgroundColor: 'transparent',
    },
  };
};

Навигация. js

const JobboardStack = createStackNavigator();
const JobboardStackScreens = () => {
  return (
    <JobboardStack.Navigator
      initialRouteName="Jobboard"
      screenOptions={sharedScreenOptions}>
      <JobboardStack.Screen
        name="JobBoard"
        component={JobboardScreen}
        options={{
          headerTintColor: '#FFFFFF',
          headerTitleStyle: {
            fontFamily: 'Raleway-Regular',
            fontWeight: '500',
            opacity: 0,
          },
        }}
      />
      <JobboardStack.Screen
        name="Job"
        component={JobScreen}
        options={{
          headerTintColor: '#FBF7EF',
        }}
      />
    </JobboardStack.Navigator>
  );
};
...