2017-09-21 33 views
3

accounts-passwordパッケージを使用して、現在のプロジェクトに小さな認証システムを実装しました。認証自体は適切に機能しています。Meteor.userId()は反応成分に反応しませんか?

私の見解では、ログインしたユーザーにのみ表示されるべきボタンやものがあります。私はMeteor.userId()をチェックしてこれを働かせました。 nullの場合、ボタンは表示されません。

問題は次のとおりです。 私がログインしている(または出ている)とき、私のビューは再レンダリングしません。それは、単純に、トグルされるボタンを隠したり表示したりすることではありません。それらを表示または非表示にするには、常に独立したレンダリングが必要です。

Meteor-Documentationは、Meteor.userId()が反応しますが、私のコンポーネントではそのように動作していません。

class SomeReactComponent extends React.Component { 
    constructor(props) { 
     super(props); 
     ... 
    } 

    ... 

    render() { 
     return (
      <span> 
       <p>Text that should be displayed to anyone!</p> 
       { Meteor.userId() ? (
        <button id="btn"> 
         This button is only available to logged in users 
        </button> 
       ) : ""} 
      </span> 
     ); 
    } 
} 

答えて

3

使用createContainer、これはあなたのMeteor.userId()反応性になります。

は、ここに私のビューが表示またはMeteor.userId()に応じてボタンを非表示にどのように見えるかを示すいくつかの反応成分です。

流星NPMは--saveが反応-アドオン - 純粋なレンダリング・ミックスイン

流星迅速なため、反応流星データ

import React from "react"; 
import {createContainer} from "meteor/react-meteor-data"; 

class SomeReactComponent extends React.Component { 
    constructor(props) { 
     super(props); 

    } 



    render() { 
     return (
      <span> 
       <p>Text that should be displayed to anyone!</p> 
       { this.props.authenticated ? (
        <button id="btn"> 
         This button is only available to logged in users 
        </button> 
       ) : ""} 
      </span> 
     ); 
    } 
} 
export default createContainer(()=>{ 
    return { 
    authenticated: Meteor.userId(), 
    } 
},SomeReactComponent); 
+0

感謝を追加インストールします。 はちょうどタイプをインストールするには提案!私がこれをしなければならないのは、流星の反応性が反応反応性と等しくないからです。ですから、反応反応を起こすためには、 'createContainer()'を使って流星反応を包み込む必要があります。 – Rockettomatoo

+1

はい、createContainerを使用してコンテナにコンポーネントをラップすることで、データがリアクティブになります。 – SSR

関連する問題