The computed property "userName" is already defined in data.


這是一次練習中所犯的錯誤,記錄一下

情況說明:要使用vuex 做一個登錄效果如下(一為未登錄,二為已登錄)

 

最初是想用vuex的getter獲取登錄名進行展示,代碼如下

<div>

  <a href="javascript:void(0)" class="navbar-link" @click="loginClick" v-show="userNameFlag">Login</a>

  <a href="javascript:void(0)" v-show="userNameFlag">{{userName }}</a>

</div>

<script>

  

export default {
name: "publicHeader",
data() {
return {
userName:''
userNameFlag:false
};
},
  mounted:{
    ...mapGetters(
    [
    'userName'
    ]
     )
    }
  },
  
  methods:{
      login(){
        axios.post('/users/login',{
       userName: this.userName,
      userPwd:this.userPwd
    })
    .then(( res )=>{
      if(res.data.status == '000'){
      this.setUserID(res.data.result.userID);
      this.setUserName(res.data.result.userName);
      this.dialogFormVisible = false;
      this.errTittle = false;
      this.userNameFlag = true;
   }else {
    this.errTittle = true;
    }
    })
      },
      
...mapMutations({
        setUserName :"SET_USERNAME",
      setUserID :"SET_USERID"
      })
    }
  }

</script>  

后來發現這個辦法行不通,直接報錯The computed property "userName" is already defined in data. 

 

后來分析了一下,應該是計算屬性的問題,在我這個頁面初始化完成的以后,計算屬性就已經開始執行,而這個時候,userName這個值我還沒有忘state中設置,所有他通過vuex的getter獲取不到,這就是原因所在,

后來想了另外一種辦法,更簡單,之前腦子短路沒有想起來。代碼如下:

<div>

  <a href="javascript:void(0)" class="navbar-link" @click="loginClick" v-show="!this.$store.state.userName">Login</a>//直接通過state獲取登錄賬號名稱,並控制顯示隱藏

  <a href="javascript:void(0)" v-show="this.$store.state.userName">{{ this.$store.state.userName }}</a>//直接通過state獲取登錄賬號名稱,並控制顯示隱藏

</div>

 

<script>

  

import { mapMutations ,mapGetters  } from "vuex";
import axios from 'axios';
export default {
name: "publicHeader",
data() {
return {
userName:'';//這個值是登錄的時候和文本框雙向數據綁定的
};
},
   methods:{
      login(){
        axios.post('/users/login',{ //登錄使用方法參數為賬號和密碼
            userName: this.userName,
      userPwd:this.userPwd
    })
    .then(( res )=>{
      if(res.data.status == '000'){
      this.setUserID(res.data.result.userID);//通過vuex 設置userID
      this.setUserName(res.data.result.userName);
//通過vuex 設置userName
         }else {
    this.errTittle = true; //賬號密碼錯誤
    }
    })
      },
      
...mapMutations({
        setUserName :"SET_USERNAME",
      setUserID :"SET_USERID"
      })
    }
  }

</script> 

 

上面就是我通過去state直接獲取數值,避免了上面的情況發生,當然這方法可能不是最好的,如果 各位大神有更好的辦法解決,請不吝賜教!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM