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直接获取数值,避免了上面的情况发生,当然这方法可能不是最好的,如果 各位大神有更好的办法解决,请不吝赐教!

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值