【问题标题】:How to change data in vue-component如何更改 vue-component 中的数据
【发布时间】:2021-06-15 13:28:11
【问题描述】:

在 Vue 组件中,我有一些来自本地存储的数据。

if (localStorage.getItem("user") !== null) {
  const obj_user = localStorage.getItem('user');
  var user = JSON.parse(obj_user);
} else {
  user = null;
}
return {
  user
}

在这个组件之后,我必须检查这些数据。我是这样做的

  <li v-if="!user"><a href="/login">Login</a></li>
  <li v-if="user">
    <a href="#"><span>{{user.name}}</span></a>
  </li>

但是数据不会立即改变,而是在页面重新加载后才会改变。在我登录页面并将用户重定向到另一个页面后,我仍然看到登录链接。 我究竟做错了什么? 也许还有其他方法可以检查和输出组件中本地存储的数据? 提前谢谢你。

【问题讨论】:

  • 顺便说一句,如果通过prop接收数据,相同的props:['user'] - 问题是一样的
  • 您在组件的哪个位置设置这些变量?此外,您应该尝试更一致地使用constlet 而不是var。此外,您应该使用v-if="!user",然后在下一个li 上执行v-else

标签: javascript vue.js frontend


【解决方案1】:

看起来问题可能与您的 user 变量不是一段反应性状态数据有关。您的问题中没有足够的代码让我们确定这一点,但看起来您已经接近掌握在 Vue 中执行此操作的正确方法了。

我认为我的解决方案是这样的......

export default {
  data() {
    return {
      user: null,
    }
  },
  methods: {
    loadUser() {
      let user = null;
      if (localStorage.getItem("user")) {
        const obj_user = localStorage.getItem("user");
        user = JSON.parse(obj_user);
      }
      this.user = user;
    }
  },
  created() {
    this.loadUser();
  }
}

我将user 保存在data 区域中,以便模板在值更改时对其做出反应。

loadUser 方法是分开的,以便可以从不同的地方调用它,例如从用户登录事件中调用,但是我确保从组件的 created 事件中调用它。

实际上,我倾向于将 user 放入 Vuex 商店,并将 loadUser 方法放入一个操作中,以便它可以在全球范围内更广泛地使用。

【讨论】:

  • 我试过了。并看到类似此错误“未定义用户”的错误
  • mounted() 中调用this.loadUser(); 而不是created() 可能会奏效。取决于您的其余代码在做什么。
  • 没关系'用户'没有定义
  • 我剩下的代码什么都不做。这是该组件的一项任务。从 localStorage 检查数据
  • 发现并修复了一个错误 'user' 未定义在 data() 而不是 user;我写了 user: this.user 是可以的,但是和以前一样,只有在页面重新加载之后
猜你喜欢
  • 2018-01-10
  • 2021-04-04
  • 2021-07-03
  • 2020-05-21
  • 1970-01-01
  • 2021-12-10
  • 1970-01-01
  • 2021-01-25
  • 1970-01-01
相关资源
最近更新 更多