You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Vue 3使用Composition API时如何正确更新组件props的值

问题原因
  • Vue遵循单向数据流设计,props 是父组件传递给子组件的只读属性,子组件禁止直接修改 props,所有 props 的变更必须由数据源所在的父组件完成。
  • 你代码中直接给 props.coords 赋值的写法不符合规范,且 props 对象本身不是 Ref 类型,不需要通过 .value 访问属性,所以注释掉的写法也是错误的。
修复方案

子组件改造

子组件通过触发自定义事件的方式,将新的坐标值传递给父组件:

<template>
  <div>
    <p>Current coords: <strong>{{ coords }}</strong></p>
    <button type="button" @click="updateCoords">更新坐标</button>
  </div>
</template>
<script>
export default {
  props: {
    coords: {
      type: Array,
      required: true
    }
  },
  // 声明自定义事件,可选但推荐添加,提升代码可维护性
  emits: ['update:coords'],
  setup(props, { emit }) {
    const updateCoords = () => {
      // 触发事件,传递新坐标参数
      emit('update:coords', [38.561785, -121.449756])
    }
    return { updateCoords }
  },
}
</script>

父组件改造

父组件监听子组件抛出的事件,更新自身存储的坐标数据源即可:

<!-- 父组件模板常规写法 -->
<YourComponent :coords="coords" @update:coords="(newVal) => coords = newVal" />

<!-- 也可以用 v-model 语法糖简写,效果完全一致 -->
<YourComponent v-model:coords="coords" />

内容的提问来源于stack exchange,提问作者Andreas Hunter

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 19:45:03