2017-11-23 39 views
0

私は、認証に応じて、条件付きのレンダリングを持つナビゲーションバーがあります。Vuexの状態を変更してもコンポーネントは再描画されませんか?

<template> 
    <div id="routing"> 
    <b-navbar variant="light" type="light"> 
     <b-navbar-brand> 
     <img id="drage" src="../assets/icon.svg"/> 
     <b-nav-text id="txt"> 
      drac1 
     </b-nav-text> 
     <div v-if="loggedIn === true"> 
      <router-link id="link" to="/" exact> 
      Home 
      </router-link> 
      <router-link id="link" to="configuration" exact> 
      Config 
      </router-link> 
      <b-nav-text id="hellotext"> 
      Hello, {{ username }} 
      </b-nav-text> 
     </div> 
     </b-navbar-brand> 
    </b-navbar> 
    </div> 
</template> 

<script> 
    export default { 
    name: 'topnavbar', 
    data() { 
     console.log(this.$store.state.loggedIn) // Changes from false to true as it is supposed to, and logs it. 
     return { 
     username: this.$store.state.username, 
     loggedIn: this.$store.state.loggedIn 
     } 
    } 
    } 
</script> 

条件がレンダリング値loggedInは、ユーザーがログインしたときfalseからtrueへの変更を行うに依存しかし、router-linkアイテムとしても。ユーザ名のナビゲーションテキストが表示されないためです。

この場合、店舗状態が変更されてもナビゲーションバーが再描画されないのはなぜですか?あなたは計算されたプロパティを使用する必要が反映される変更のために、それは間違って使用している

+0

コンポーネントが作成されたときに 'data'だけ、一度初期化されます。計算されたものが必要です。 – Bert

+0

私は、計算されたプロパティのユーザー名 "は割り当てられましたが、設定者はありません"という警告を受け取りました。 – cbll

答えて

1

export default { 
    name: 'topnavbar', 
    data() { 

     return { 

     } 
    }, 

    computed: { 
     username(){ 
      return this.$store.state.username 
     }, 
     loggedIn(){ 
      return this.$store.state.loggedIn 
     } 
    } 
    } 
+0

私は何とかdata()にバインドする必要がありますか?あなたの方法でコンソールがスローするからです。 '計算されたプロパティ" username "は割り当てられましたが、セッターはありません。 – cbll

+0

' v-model'のどこかで使っていますか? – Tomer

+0

@cbll計算されたプロパティをv-modelとして使用している場合は、次のようなプロパティを作成します: 'username:{get(){return this。$ store.state.username}、set(value){/ * some mutation * /}} ' –

関連する問題