Я хочу добавить чек на каждую страницу моего приложения. Проверка заключается в том, что если файл существует, то перетащите пользователя на страницу.
Я думаю, что HOC - это один из способов сделать это (есть другие?)
и я придумал это
import React from "react";
import { NavigationScreenProp } from "react-navigation";
import RNFS from "react-native-fs";
interface MyComponentProps {
navigation: NavigationScreenProp<any, any>;
}
interface MyComponentState {}
const importFileCheck = WrappedComponent => {
class HOC extends React.Component<MyComponentProps, MyComponentState> {
constructor(props) {
super(props);
this.props.navigation.addListener("didFocus", () => {
RNFS.exists(
".\path\I\care\about.xml"
).then(exists => {
if (exists) {
this.props.navigation.navigate("Export");
}
});
});
}
render() {
return <WrappedComponent {...this.props} />;
}
}
return HOC;
};
export default importFileCheck;
Когда я запускаю страницу, я получаю сообщение об ошибке
TypeError: undefined не является объектом (оценивает this.props.navigation.addListener)
Так что я думаю, что навигационная «вещь» не проходит должным образом
Для завершения я использую HOC, вот так
importFileCheck(App)
и App
уже содержат навигационные элементы и работают без HOC.
Импорт
"реагировать": "16.6.1",
«реактивный-нативный»: «0,57,7»,
«реакция-навигация»: «3.2.0»
Дополнительные подробности для увлеченных: D
Сначала я создаю навигатор стека, который содержит все страницы моего приложения
const appNav = createStackNavigator(
{
Calculator: {
screen: Calculator,
navigationOptions: { title: "Calculator" }
},
// more pages
);
export default createAppContainer(appNav);
В App.tsx
это 'обернуто' в другие компоненты
const WrappedStack = () => {
return <RootStack screenProps={{ t: i18n.getFixedT() }} />;
};
const ReloadAppOnLanguageChange = translate("translation", {
bindI18n: "languageChanged",
bindStore: false
})(WrappedStack);
class App extends React.Component {
public render() {
return (
<I18nextProvider i18n={i18n}>
<StyleProvider style={getTheme(material)}>
<Provider
ManureStore={ManureStore}
SettingsStore={SettingsStore}
FieldStore={FieldStore}
CalculatorStore={CalculatorStore}
FarmStore={FarmStore}
>
<ReloadAppOnLanguageChange />
</Provider>
</StyleProvider>
</I18nextProvider>
);
}
}
и наконец мы завернем с моим новым HOC
export default importFileCheck(App)