【问题标题】:Vue.js vuex props don't rerenderVue.js vuex 道具不会重新渲染
【发布时间】:2019-03-11 21:51:33
【问题描述】:

我正在使用Vuex 并显示如下数据:

<template>
    <div>
        <div>
            <div v-for="port in ports">
                <port :port="port"></port>
            </div>
        </div>
    </div>
</template>

<script>
    import { mapState } from 'vuex';

    export default {
        computed: {
            ...mapState({
                ports: state => state.ports.ports,
            })
        }
    }
</script>

我现在遇到的问题是,当我在另一个组件中更改ports state 时,它会正确更新ports state,但v-for 循环中的端口没有更新。

如何确保端口组件rerenders中的数据也正确?

【问题讨论】:

  • 如何更新 state.ports?推?拼接?你真的有 state.ports.ports,还是应该是 state => state.ports?

标签: javascript vue.js state vuex rerender


【解决方案1】:

Vue Beginner Gotchas: Why isn't the DOM updating?

大多数时候,当您更改 Vue 实例的数据时,视图会更新。但是有两种极端情况:

  1. 当您添加观察数据时不存在的新属性时。

  2. 当您通过直接设置索引(例如 arr[0] = val)或修改其长度属性来修改数组时。

如果您通过执行以下操作更改端口数据:

this.ports[0] = 1234;

或者是这样的:

this.ports[4].property = 'some value';

然后 Vue 将无法检测到发生了更改。您可以通过以下方式绕过这个陷阱:

Vue.set(this.ports, 0, 1234);

【讨论】:

  • 好的,谢谢,所以目前我正在这样做:this.ports[0] = 1234; 还有其他方法可以重新渲染吗?
  • @Jenssen vuejs.org/v2/guide/list.html#Caveats 有关于如何绕过 Vue 的反应性陷阱的建议,我也会更新我的答案
  • 谢谢你真棒!
  • @Jenssen 如果我的回答解决了您的问题,请点击灰色复选标记接受,谢谢!
猜你喜欢
  • 2018-10-23
  • 1970-01-01
  • 2020-10-21
  • 2017-07-22
  • 1970-01-01
  • 2018-04-16
  • 2018-12-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多