У меня есть страница с ограниченным доступом, использующая 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>
}
}
}
Наблюдаемые необходимые части:
$this = this;
пользователь = Meteor.user(); //Meteor.userId() не работает.
удалена история браузера, потому что она уйдет до того, как пользователь будет определен.
Теперь мне просто нужно найти решение по определению user/userId перед монтированием рендеринга.