Процессы аутентификации React Navigation v5 (экраны как разные файлы)
Если мы видим в примере документа: https://reactnavigation.org/docs/auth-flow/:
function SignInScreen() {
const [username, setUsername] = React.useState('');
const [password, setPassword] = React.useState('');
const { signIn } = React.useContext(AuthContext); // ????
return (
<View>
<TextInput
placeholder="Username"
value={username}
onChangeText={setUsername}
/>
<TextInput
placeholder="Password"
value={password}
onChangeText={setPassword}
secureTextEntry
/>
<Button title="Sign in" onPress={() => signIn({ username, password })} />
</View>
);
}
SignInScreen
находится в одних и тех же App.js. Если мы потушимSignInScreen
как новый файл SignInScreen.js, как отправитьsignIn
из SignInScreen.js?
1 ответ
Решение
У вас должна быть обертка для SignInScreen
// App.js
import SignInScreen from '...'
// Export the context
export const AuthContext = React.createContext();
export default function App() {
// ... some bootstrap code
// https://reactnavigation.org/docs/auth-flow/#implement-the-logic-for-restoring-the-token
const authContext = React.useMemo(
() => ({
signIn: async (data) => { ... },
}),
[]
);
return (
<AuthContext.Provider value={authContext}>
<SignInScreen />
</AuthContext.Provider>
);
}
import { AuthContext } from "./App.js"
function SignInScreen() {
// Must be child of AuthContext.Provider
const { signIn } = React.useContext(AuthContext);
return (
<View>
...
</View>
);
}