2017-02-15 4 views
0

を更新した後、私は制限さMeteor.userIdを使用してページ()と役割を持っているMeteor.userId()未定義右:Tracker.autorunを適用するには?ページ

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()は機能しません。
ブラウザが削除されました。ユーザーが定義される前に移動するためです。

レンダリングの前にuser/userIdを定義するだけで解決策を見つける必要があります。

答えて

1

Tracker.autorunは、依存する無効なデータソースが変更されたときに自動的に呼び出される関数です。

単純に言えば、Tracker.autorun()は入力として機能し、この機能を今すぐ実行し、後でデータソースが変更されるたびに戻ります。

Meteor.user()Meteor.userId()が反応するため、を使用してユーザー文書を追跡できます。 componentDidMount()Tracker.autorun()と呼び出し、変更時に別の場所にユーザー文書を保存します。

コードスニペット以下の希望は助け:

componentDidMount() { 
     var context = this; 

     Tracker.autorun(function(){ 
      let user = Meteor.user(); 
      if (user != undefined) { 
       context.setState({ user: user, }); 
      } 
     }); 
    } 
関連する問題