【问题标题】:vuejs props are undefined after refresh刷新后 vuejs 道具未定义
【发布时间】:2020-07-01 09:49:15
【问题描述】:

App.vue

模板:

<ResponsiveNavigation
  :nav-links="navLinks"
/>

脚本

data: () => ({
  navLinks: []
}),

created: function() {
  this.getSocialNetworks();
},

methods: {
    getSocialNetworks() {
      var self = this;

      axios
        .get(MY_API_URL)
        .then(function(res) {
          var fb_url = res.data.data.filter(obj => {
            return obj.key === "Social_Facebook";
          });
          self.navLinks.fb = fb_url[0].defaultValue;
          //
          var ig_url = res.data.data.filter(obj => {
            return obj.key === "Social_Instagram";
          });
          self.navLinks.ig = ig_url[0].defaultValue;
          //
        })
        .catch(function(error) {
          console.log("Error", error);
        });
    }
  }

响应式导航.vue:

<a :href="$props.navLinks.fb"></a>

如果我控制台记录$props.navLinks 我已经存储了所有内容。

但是在第一次加载后,href 不起作用。

【问题讨论】:

  • 你能把负责打电话给getSocialNetworks的东西贴出来
  • $props. 是不必要的。
  • @springbo - 对!完成
  • @DecadeMoon - 行为相同。第一次加载工作,刷新其undefined
  • 你能检查一下 所以如果 navLinks 被填充而不是 null 它将生成 html 元素

标签: javascript vue.js


【解决方案1】:

我相当确定这是由于数组的反应性和不反应性。

您实际上使用的不是数组,而是一个对象

data: () => ({
  navLinks: []
}),

 data: () => ({
  navLinks: {
    fb:'', 
    ig:''}
}),

我认为它会更合适地设置反应性道具。

如果您需要一个数组,请使用 array.push() 以便它可以做出相应的反应。我也可以考虑将其移至mounted() 方法。最后,您将 $props 放入您的代码中,您是否还有其他未向我们展示的可能有冲突的 props?

【讨论】:

  • 没有其他道具。是的!你是对的,它奏效了。非常感谢您详细解释!
  • 我认为每个人刚开始都会遇到这种情况。很高兴你被排序
猜你喜欢
  • 2020-02-04
  • 2021-07-07
  • 2018-02-25
  • 1970-01-01
  • 2022-01-11
  • 2019-10-05
  • 2020-03-15
  • 2020-09-10
  • 1970-01-01
相关资源
最近更新 更多