如何正确重置 Vue Composition Api 反应值

Posted

技术标签:

【中文标题】如何正确重置 Vue Composition Api 反应值【英文标题】:How to properly reset Vue Composition Api's reactive values 【发布时间】:2020-07-25 19:50:28 【问题描述】:

我想知道如何在 vuejs 设置中重置响应式? (我知道是否将其更改为 ref 并使用 view.value 会解决这个问题,但应该有一个使用响应式的答案)

【问题讨论】:

你弄明白了吗?也在找这个。 @InfoStatus 还没有,但你可以投票给这个问题更多的机会被其他人看到,所以我们终于得到了答案 小心,您的变量和类型名称存在命名冲突。变量应该是驼峰式以将它们与您的 PascalCased 类型分离 【参考方案1】:

你可以使用Object.assign:

  setup() 
    const initialState = 
      name: "",
      lastName: "",
      email: ""
    ;

    const form = reactive( ...initialState );

    function resetForm() 
      Object.assign(form, initialState);
    

    function setForm() 
      Object.assign(form, 
        name: "John",
        lastName: "Doe",
        email: "john@doe.com"
      );
    

    return  form, setForm, resetForm ;
  

See it live on codesandbox

学分:taken from here

【讨论】:

这是典型的方式,我希望有一个更好的答案来解决这个问题,但正如他们在 vue-next github 中所说的那样。似乎还没有更好的答案。谢谢你花时间在上面?【参考方案2】:

来自官方 Vueland Discord 服务器:

“据我所知,响应式是我们使用 Classic API 进行响应式的旧方式,因此重置值应该类似于:”

const myData = reactive(
  foo: true,
  bar: ''
)

function resetValues () 
 myData.foo = true
 myData.bar = ''

因此,如果您不更改属性,您应该可以使用Object.assign()。 (如果我错了,请纠正我)

【讨论】:

【参考方案3】:

Object.assign 对我不起作用。 (也许是因为我在 Nuxtjs 2 中为 Composition API 使用了 shim?)对于遇到相同问题的任何人:我必须使用紧凑循环。

  setup() 
    const initialState = 
      name: "",
      lastName: "",
      email: ""
    ;

    const form = reactive( ...initialState );

    function resetForm() 
        for (const [key, value] of Object.entries(initialState)) 
          form[key] = value
        
    

    function setForm(values = name: "John", lastName: "Doe", email: "john@doe.com") 
        // only loop with the supported keys of initial state
        for (const key of Object.keys(initialState)) 
          form[key] = values[key]
        
    

    return  form, setForm, resetForm ;
  

【讨论】:

使用active wrap时如何重置数组?

以上是关于如何正确重置 Vue Composition Api 反应值的主要内容,如果未能解决你的问题,请参考以下文章

如何正确使用 v-model 和 Composition API :value="modelValue" 语法?将 Vue2 自定义输入转换为 Vue3

如何使用 TypeScript 在 Vue2.x 类组件中正确注释

@vue-composition / 如何在 setup() 中使用异步方法

如何使用 @vue/composition-api 和 nuxt.js 获取 vue-apollo 实例

如何使用 nuxt 和 @vue/composition-api 提供/注入 Vue 根实例?

如何在 Vue3 Composition API 上使用 Vue2 插件?