当前位置: 首页 > 知识库问答 >
问题:

vue.js - Vue3,当ref对象的属性被另一个ref对象引用时,如何保持响应式?

郝哲茂
2023-05-13
const model = ref({
    layout: 'vertical'
})
const formOptions = ref({
    formProps: {
        layout: model.value.layout
    }
})

我需要在执行modal.value.layout = 'inline'
使得formOptions.value.formProps.layout同步修改,
但是在以上↑↑↑↑↑↑↑所示的代码中无法实现
目前的方案只得按如下↓↓↓↓↓所示代码实现

const layout = ref('vertical')
const model = ref({
    layout
})
const formOptions = ref({
    formProps: {
        layout
    }
})
// 此时执行layout.value = 'inline',可以同步修改model和formOptions中的layout属性

我的问题是:有没有更好的实现方案,在不单独定义一个layout属性的情况下实现我的需求?

共有4个答案

公德明
2023-05-13
const model = ref({
    layout: 'vertical'
})
const obj = reactive({
    formProps: model
});

测试代码:

setTimeout(()=> {
    model.value.layout = 'inline';
}, 2000);
watch([obj, model], ()=> {
    console.log("obj改变了", obj.formProps.layout);
    console.log("model改变了", model.value.layout);
});
梁丘威
2023-05-13

利用属性访问器 get set

const model = ref({
    layout: 'vertical'
})
const formOptions = ref({
    formProps: {
        get layout () {
            return model.value.layout
        }
    }
})
茹康裕
2023-05-13

可以考虑结合 reactive 和 toRef(或 toRefs)使用

const m = reactive({
  layout: 'vertical',
})

const f = ref({
  formProps: {
    layout: toRef(m, 'layout'),
  },
})

toref

姜育
2023-05-13
import { ref, computed } from 'vue';

const model = ref({
  layout: 'vertical'
});

const formOptions = ref({
  formProps: {
    layout: computed(() => model.value.layout)
  }
});


model.value.layout = 'inline';
 类似资料:
  • vue3怎么深拷贝ref和reactive对象让其保持 响应式属性? 因为用json.parse(json.stringify())的话会使其失去响应式

  • 是否有必要向租户更新房屋的新引用? 编辑:为了澄清,您可以假设实体是在上面的代码之前加载的(因此,处于托管状态)。因为这个“事务”是Spring函数的一部分,所以事务将在它的末尾隐式提交。 编辑二:问题不在于我是否应该在一开始就把房子存起来,以避免这种情况。它是关于更好地理解对象是如何管理的。

  • 在vue3框架中,我使用ref定义了一个变量,但是发现在更新其数据之后,页面上并不会有响应式变化,具体表现是在更新数据之后不会出现表格最前面的选择框 数据定义 数据初始化,其中list是一个数组,具有唯一的id属性 组件A中定义了计算属性rowSelection 当点击一个按钮之后,触发BatchEdit函数,通过emit抛出新的rowSelection 在父组件中进行事件定义并更新内容 rowS

  • 假设我们有一个这样定义的对象A: 出于某种原因,我需要创建第二个对象B,它只具有对象A的前两个属性: 所以我的问题是:将对象A复制到对象B的最佳方法是什么?我一直在逐个复制获取者和设置者的属性,但有些事情告诉我一定有更好的方法来做到这一点!特别是当对象将具有很多属性时,我必须编写一行又一行的代码,只是为了将它们全部复制到第二个对象B... 多谢了:) 编辑:我一直被一个“另一个问题的可能重复”提醒

  • 我可以这样做: 然而,这似乎不起作用。我返回到的规范,注意到可以是引用对象,但不能。 如果您无法引用响应定义对象(最顶层的)中的项,那么允许该对象的意义何在?有没有办法做到这一点?

  • 根据Mapstruct文档,通过为被引用的对象(对象B)定义映射方法,可以将一个对象(对象A)映射到D,该对象包含另一个对象(对象B)。但是如果我只需要映射那个对象(对象B)的属性而不是整个对象呢? 但是如何用Java和MapStruct来实现呢?