我目前正在使用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>
);
}
但这只会返回任何内容(因为它可能是一个承诺)。
我该如何解决这种问题?
编辑
我也尝试过获取网页并将其置于状态。这样做的问题是,这只是一个 html 页面,所以在 webview 中渲染的页面不是很实用。