【发布时间】:2016-07-25 15:58:39
【问题描述】:
我有以下应用:
主要 -> 登录 -> 收藏夹
在主屏幕上,您可以点击一个名为“收藏夹”的按钮:
1) 如果您已登录,它将显示您的收藏夹
2) 如果您没有登录,它会显示登录屏幕
假设某人没有登录并且他们登录到应用程序,这个集合是来自 API 的密钥并返回一个警告说“你现在登录了..”
登录后返回主屏幕时,如果他们点击“收藏夹”,它仍会显示登录屏幕。他们必须关闭应用程序并重新启动应用程序才能使登录生效。
确保他们不必继续登录的最佳方式是什么?
这里是主文件:
renderView() {
if(this.state.token != null)
{
var data = this.getData();
}else{
console.log("token " + this.state.token);
this.refs.nav.navigator.push({
title: "Login",
component: Login,
rightButtonTitle: 'Cancel',
passProps: {nav: navigator},
onRightButtonPress: () => { this.refs.nav.navigator.pop(); }
});
}
}
render() {
return (
<NavigatorIOS
ref="nav"
style={styles.container}
initialRoute={{
title: 'Home',
component: Main,
rightButtonTitle: this.renderIcon(),
onRightButtonPress: () => {
this.renderView();
}
}} />
);
}
getData() {
var query = urlForQueryAndPage('token', this.state.token, 1);
fetch(query)
.then(response => response.json())
.then(json => this._handleResponse(json.response))
.catch(error =>
this.setState({
isLoading: false,
message: 'Something bad happened ' + error
}));
}
这是主文件,检查是否存在令牌,它将导航到收藏夹,否则导航到登录。
我在 Login.js 中的句柄登录:
handleLogin(reply) {
if(reply.body.response == 'true')
{
this.setServerKey(reply.body.key);
AlertIOS.alert(
"Login",
"You are now signed in. Please go back to access your favourites!"
);
}else{
AlertIOS.alert(
"Login",
"Wrong username/password. Please try again!"
);
}
}
如您所见,登录只会弹出一个窗口。但我需要以某种方式刷新主屏幕,以确保在用户无需重新登录的情况下显示收藏夹。
【问题讨论】:
-
在您的
main.js文件中,您是否获取令牌并在componentWillMount循环中执行this.setState({token});? -
@tushar Khat - 嗨,不,我只是在控制器中完成的
-
@TusharKhatiwada 嘿,我的回复给你了吗?
标签: react-native