为了账号安全,请及时绑定邮箱和手机立即绑定

组件中的 Vuejs3 反应数组

组件中的 Vuejs3 反应数组

慕桂英4014372 2023-05-25 16:17:47
我尝试在组件中使用反应数组。它适用于对象,但不适用于对象数组。数组更新时如何更新视图?var self = currentClassInstance // thisself.store = {    resources: Vue.reactive([]),    test:  Vue.reactive({ test: 'my super test' }),    setResources(resources) {        // this one doesn't update the view. ?        this.resources = resources    },     setResources(resources) {        // this one update the view        this.test.test = "test ok"    },  }....const app_draw = {    data() {        return {            resources: self.store.resources,            test: self.store.test,        }    },           updated() {        // triggered for "test" but not for "resources"        console.log('updated')    },           template: '<div v-for="(resource, key) in resources" :data-key="key">{{resource.name}}</div>'};....
查看完整描述

3 回答

?
德玛西亚99

TA贡献1770条经验 获得超3个赞

根据官方文档:

Reactive
获取一个对象并返回原始对象的反应代理。这等同于 2.x 的Vue.observable()
...。
反应式转换是“深度”的:它影响所有嵌套属性。在基于 ES2015 Proxy 的实现中,返回的代理不等于原始对象。建议专门使用反应式代理并避免依赖原始对象。

我建议将数组分配给反应参数中名为 value 的字段,就像您所做的那样test

resources: Vue.reactive({value:[]}),

然后用于resources.value=someVal更新该值。


查看完整回答
反对 回复 2023-05-25
?
交互式爱情

TA贡献1712条经验 获得超3个赞

两件事情:

  • resources: Vue.reactive({value:[]})可以通过使整个商店反应来避免

  • data()是一个本地副本,但你真的想要一个真实的单一来源(即商店),所以通过计算属性访问它(基本上是 Vuex 的工作方式)。

var self = currentClassInstance // this


self.store = Vue.reactive({

  resources: [],

  setResources(resources) {

    this.resources = resources

  }, 

})


const app_draw = {


  computed: {

    resources() {

      return self.store.resources

    }

  }

       

  template: '<div v-for="(resource, key) in resources" :data-key="key">{{resource.name}}</div>'

};


查看完整回答
反对 回复 2023-05-25
?
慕的地8271018

TA贡献1796条经验 获得超4个赞

一个快速的方法


const resources = reactive([]);


// set resources

resources.length = 0;

resources.push(...items)


查看完整回答
反对 回复 2023-05-25
  • 3 回答
  • 0 关注
  • 129 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信