2017-09-21 55 views
3

我剛剛使用 accounts-password包對我當前的項目實施了一個小型認證系統。驗證本身正常工作。Meteor.userId()在響應組件中沒有響應?

在我看來,有一些按鈕和東西應該只顯示登錄用戶。我通過檢查Meteor.userId()得到了這個工作。如果null,按鈕將不會顯示。

問題如下: 當我登錄(或退出)時,我的視圖不會重新渲染。它不會隱藏或顯示應切換的按鈕。它總是需要獨立的放棄來顯示或隱藏它們。

Meteor-Documentation指出,Meteor.userId()應該是反應性的,但它在我的組件中不是那樣。

這裏是展示我的觀點看起來像顯示或隱藏取決於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()反應。 只安裝類型:

流星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()'來包裝流星的反應性,以便有反應的ui :)再次感謝! – Rockettomatoo

+1

是的,通過使用createContainer將我們的組件包裝到容器中,它將使我們的數據成爲被動的。 – SSR