В настоящее время я использую react-native-keychain
для безопасного хранения токенов доступа. В большинстве случаев это работает хорошо, но у меня возникают проблемы при попытке условного рендеринга компонента на основе того, доступен токен или нет.
В настоящее время мой код выглядит примерно так:
function Questionnaire() {
const [token, setToken] = useState(null);
Keychain.getGenericPassword().then(credentials => {
const token = credentials.password.replace('Bearer ', '');
setToken(token);
});
if (token != null) {
return (
<WebView
source={{
uri: `url?token=${token}`,
}}
...
/>
);
} else {
return <Text>Loading...</Text>;
}
}
Условный рендеринг работает здесь, но я просто храню токен в состоянии, которого я хочу избежать.
Я пытался сделать что-то вроде этого:
function Questionnaire() {
const [token, setToken] = useState(null);
return (
<View>
{(() => {
Keychain.getGenericPassword().then(credentials => {
const token = credentials.password.replace('Bearer ', '');
return
(
<View>
... // do something with the token
</View>
);
});
})()}
</View>
);
}
Но это просто ничего не возвращает (вероятно, из-за того, что это обещание).
Как я мог go решить эту проблему?
РЕДАКТИРОВАТЬ
У меня есть также попытался получить веб-страницу и поместить ее в состояние. Проблема в том, что это всего лишь страница html, поэтому страница, отображаемая в веб-представлении, не очень функциональна.