vue--------父传子及常见问题------传递原理-----props配置

74 篇文章 3 订阅

一、父传子

父子关系更多是指使用关系
因为在单文件组件中不能通过components来创建结构上的子组件
意味着在项目中,所谓父组件和子组件都是单独的单文件组件,它们更多是的引入使用关系
父传子就是将父组件中的数据传递给子组件

二、四个步骤实现父传子数据传递

步骤一:准备好父组件需要传递的数据
步骤二:实现父传子:在父组件中使用子组件的位置,
为子组件的props成员赋值
步骤三:接收父组件传递过来的数据成员
步骤四:渲染效果
实际传递只需要2、3步骤

父组件代码

.<template>
  <div class="father">
    <h1>我是父组件</h1>
    <!-- 使用 -->
    <!-- 步骤二:实现父传子:在父组件中使用子组件的位置,
    为子组件的props成员赋值 -->
    <!-- 1.如果需要变量,则需要用到v-bind动态绑定,缩写 -->
    <son1 :getname="name"></son1>
    <!-- 2.如果赋值是一个字符串,就直接赋值,输出结果是:name -->
    <!-- <son1 getname="name"></son1> -->
  </div>
</template>

<script>
//引入组件
import son1 from "./son1";
export default {
  //注册
  components: {
    son1,
  },
  data() {
    return {
      //   步骤一:准备好父组件需要传递的数据
      name: "山竹",
    };
  },
};
</script>

.<style lang="less" scoped>
.father {
  //添加样式区分
  width: 100%;
  background-color: cadetblue;
}
</style>

子组件代码

.<template>
  <div class="son">
    <h1>我是子组件</h1>
    <!-- 步骤四:渲染效果 -->
    <h2>接收到父组件传递过来的name值:{{ getname }}</h2>
  </div>
</template>

<script>
export default {
  // 步骤三:接收父组件传递过来的数据成员
  // 方法一:
  //   props: ["getname"],
  //   方法二:
  props: {
    // 这种写法支持对props成员进行配置
    getname: {
      type: String, //要求传递的类型,大写开头
      required: true, //强制传递,否则报错
      default: "山竹回家了", //不传值时默认传
    },
  },
  data() {
    return {
      //   getname: "?",
    };
  },
};
</script>
.<style lang="less" scoped>
.son {
  //添加样式区分
  width: 80%;
  background-color: cornflowerblue;
}
</style>

效果
在这里插入图片描述

三、父传子传递原理

在这里插入图片描述

四、常见报错问题

Property or method “getname” is not defined on the instance but referenced during render. Make sure that this property is reactive, either in the data option, or for class-based components, by initializing the property.

一般是没设置props接受父元素数据,直接渲染了

The data property “getname” is already declared as a prop. Use prop default value instead.
一般是props成员与data重复

Missing required prop: “getname”
没有为必要属性传递数据.(可以看下步骤二是不是忘了传)

Invalid prop: type check failed for prop “getname”. Expected String with value “111”, got Number with value 111.
无效的数据传递,这里需要字符串,但接收到了数字.(看下接收和发布的数据类型)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值