我有使用Meteor.userId()和角色受限頁:如何申請Tracker.autorun? Meteor.userId()清爽的頁面後未定義權
class AdminPage extends Component {
render() {
return (
<div>
{
Roles.userIsInRole(Meteor.userId(), 'admin') ? (
<Master_Layout renderCenter={<Article_Editor />}/>
) : browserHistory.push('/')
}
</div>
)
}
}
此代碼重定向用戶到「/」刷新後,因爲Meteor.userId()被未定義。在刷新頁面之前如何確保Meteor.userId()不是未定義的?
我搜索了答案。我發現Tracker.autorun是一個解決方案,但我不明白如何應用它。
謝謝你的幫助。我更新的代碼:
constructor(props) {
super(props);
this.state = { user: '' };
}
componentDidMount() {
var $this = this;
Tracker.autorun(function() {
let user = Meteor.user();
if(user != undefined) {
$this.setState({ user: user });
}
});
}
render() {
if(Roles.userIsInRole(this.state.user, 'admin')) {
return (
<div>
<Master_Layout renderCenter={<Article_Editor />} />
</div>
)
} else {
return <div>loading...</div>
}
}
}
觀察所需的部件:
$此=這一點;
user = Meteor.user(); //Meteor.userId()不起作用。
刪除了browserHistory,因爲它將在用戶定義之前離開。
現在我只需要找到一個解決方案,在渲染安裝之前定義user/userId。