typescript - Ako využiť useContext v expo routeri?
Používam novú verziu Expo-Router, ktorá používa navigáciu založenú na súboroch. Použil som Reactov context API + hook useReducer na vytvorenie univerzálneho jazykového kontextu v aplikácii. Problém je, že nemám tušenie, kde obaliť poskytovateľa kontextu, nevidím žiadnu hlavnú komponentu.
moja štruktúra projektu:
app
Dashboard.tsx
index.tsx
Login.tsx
Profile.tsx
assets
components
Button.tsx
Drawer.tsx
DrawerItem.tsx
HR.tsx
TextField.tsx
forms
LoginForm.tsx
ts
declarations.d.ts
.gitignore
app.json
babel.config.js
index.ts
metro.config.js
package.json
tsconfig.json
yarn.lock
index.ts
import "expo-router/entry"
Našiel som túto diskusiu na GitHub okolo rovnakého problému, ale nemám žiadny súbor _layout
Odpoveď č. 1
Musíte mať súbor _layout na najvyššej úrovni. Zabaľte ho do poskytovateľa a malo by to pre vás fungovať.
<AppProvider>
<Stack initialRouteName="home">
<Stack.Screen
name="home"
options={{
headerShown: false,
}}
/>
</Stack>
</AppProvider>
Odpoveď č. 2
Ak nepotrebujete štýlovanie, ktoré prichádza s layoutom, najlepší spôsob, ako to urobiť, je použiť Slot z Expo Router bez použitia stacku. Táto metóda je tiež skvelá pre veľké projekty, pretože bude aplikovaná v celom projekte, ak je súbor _layout umiestnený na vrchu alebo na koreňovej úrovni projektu.
import React from 'react';
import { Provider } from './context';
import { Slot } from 'expo-router';
export default function _layout() {
return (
<Provider>
<Slot />
</Provider>
);
}
