вы можете использовать React.Context
с React Hooks для простого взаимодействия состояний между вкладками, затем вы можете перейти на React.useReducer
Ниже приведен basi c пример с использованием React.Context
- Пример на CodeSandbox.io
import React from "react";
// create the context
export const Context = React.createContext();
// create the context provider, we are using use state to ensure that
// we get reactive values from the context...
export const TheProvider = ({ children }) => {
// the reactive values
const [sharedValue, setSharedValue] = React.useState("initial");
// the store object
let state = {
sharedValue,
setSharedValue
};
// wrap the application inthe provider with the initialized context
return <Context.Provider value={state}>{children}</Context.Provider>;
};
export default Context;
Обернуть приложение в провайдере
import { TheProvider } from "./some-context";
const App: React.FC = () => {
return (
<IonApp>
<TheProvider>
{/* here the provider wraps the whole application to allow */}
{/* access to the context that is defined */}
<IonReactRouter>
<IonTabs>
<Route
path="/"
render={() => <Redirect to="/tab1" />}
exact={true}
/>
<IonRouterOutlet>
<Route path="/tab1" component={Tab1} exact={true} />
<Route path="/tab2" component={Tab2} exact={true} />
</IonRouterOutlet>
<IonTabBar slot="bottom">
<IonTabButton tab={"Title1"} href={"/tab1"}>
<IonLabel>{"Title1"}</IonLabel>
</IonTabButton>
<IonTabButton tab={"Title2"} href={"/tab2"}>
<IonLabel>{"Title2"}</IonLabel>
</IonTabButton>
</IonTabBar>
</IonTabs>
</IonReactRouter>
</TheProvider>
</IonApp>
);
};
А теперь пример использования во вкладке
const Tab2 = () => {
// use react hooks to get the context and the information that is stored
// in the context, the value and the function to modify the value
const { sharedValue, setSharedValue } = React.useContext(AppContext);
return (
<IonPage>
<IonHeader>
<IonToolbar>
<IonTitle>TAB ONE</IonTitle>
</IonToolbar>
</IonHeader>
<IonContent>
<>
<h2>TAB TWO</h2>
<div>{sharedValue}</div>
<IonButton
onClick={() =>
setSharedValue("From Tab 2: " + new Date().getMilliseconds())
}
>
Update Value
</IonButton>
</>
</IonContent>
</IonPage>
);
};