Использование useReducer приводит к нарушению инварианта: хуки могут вызываться только внутри тела компонента функции - PullRequest
3 голосов
/ 14 марта 2019

У меня возникли некоторые проблемы с последней разработкой React для React Native, поскольку React представил хуки, которые я пытаюсь обойти, но безрезультатно.У меня есть экран для RN, чтобы сделать некоторые анимации заставки, и он не работает с последним React, всегда выдает мне вышеуказанную ошибку.(работает с версией React 16.7.0-alpha.2).Что-то я делаю не так?

SplashScreen.js

import React, { useReducer } from "react";

const initialState = { currentIndex: 0 };

const reducer = ???;

const SplashScreen = (props: Props): ReactElement => {
  const [state, dispatch] = useReducer(reducer, initialState);

  return (
    <GestureRecognizer
      style={styles.container}
      config={gestureRecognizerConfig}
      onSwipe={direction => dispatch({ type: direction })}
    >(...)</GestureRecognizer>
  );
};

export default SplashScreen;

AppNavigator.js

import { createAppContainer, createSwitchNavigator } from "react-navigation";
import SplashScreen from "./SplashScreen.js";

export default createAppContainer(
  createSwitchNavigator(
    {
      Splash: SplashNavigator,
    },
    {
      initialRouteName: "Splash",
    },
  ),
);

App.js

const App = () => (
  <View>
    {Platform.OS === "ios" && <StatusBar barStyle="default" />}
      <AppNavigator
        persistenceKey={navigationPersistenceKey}
        renderLoadingExperimental={() => <ActivityIndicator />}
      />
  </View>
);

export default App;
...