小程序开发之路uni-app 05

173 阅读1分钟

「这是我参与2022首次更文挑战的第15天,活动详情查看:2022首次更文挑战

使用vue3+vite开发uniApp

props

props 可以是数组或对象,用于接收来自父组件的数据。

type: 会检查一个 prop 是否是给定的类型,否则抛出警告

required: 定义该 prop 是否是必填项

validator: 自定义验证函数会将该 prop 的值作为唯一的参数代入。在非生产环境下,如果该函数返回一个 false 的值 (也就是验证失败),一个控制台警告将会被抛出

子组件接收父组件参数

  <template>
        <view>
            <!-- 子组件 componentA -->
            <view>{{age}}</view>
        </view>
    </template>
    <script>
        export default {
            props: {
                // type 检测类型 +  validator其他验证
                age: {
                    type: Number,
                    default: 0,
                    required: true,
                    validator: function(value) {
                        return value >= 0
                    }
                }
            }
        }
    </script>

父组件调用子组件时传参

 <template>
        <view>
            <!-- 父组件 -->
            <componentA :age="20"></componentA>
        </view>
    </template>
  • 传递字符串值 <blog-post title="My journey with Vue hello world"></blog-post>

  • 传递参数值 v-bind 或简写 : 动态赋值 `

  • 传入数字

    <!-- 即便 `20` 是静态的,我们仍然需要 `v-bind` 来告诉 Vue -->
    <!-- 这是一个 JavaScript 表达式而不是一个字符串。v-bind 进行类型转换  -->
    <blog-post :likes="20"></blog-post>

    <!-- 用一个变量进行动态赋值。 v-bind 进行类型转换 -->
    <blog-post :likes="post.likes"></blog-post>
  • 传入布尔值
    <!-- 包含该 prop 没有值的情况在内,都意味着 `true`。 简写方式 常见 checked  disabled -->
    <blog-post is-published></blog-post>

    <!-- 即便 `false` 是静态的,我们仍然需要 `v-bind` 来告诉 Vue  v-bind 进行类型转换 -->
    <!-- 这是一个 JavaScript 表达式而不是一个字符串。 -->
    <blog-post :is-published="false"></blog-post>

    <!-- 用一个变量进行动态赋值。 -->
    <blog-post :is-published="post.isPublished"></blog-post>
  • 传入数组
    <!-- 即便数组是静态的,我们仍然需要 `v-bind` 来告诉 Vue -->
    <!-- 这是一个 JavaScript 表达式而不是一个字符串。 v-bind 进行类型转换 -->
    <blog-post :comment-ids="[234, 266, 273]"></blog-post>

    <!-- 用一个变量进行动态赋值。-->
    <blog-post :comment-ids="post.commentIds"></blog-post>
  • 传入对象
    <!-- 即便对象是静态的,我们仍然需要 `v-bind` 来告诉 Vue -->
    <!-- 这是一个 JavaScript 表达式而不是一个字符串。v-bind 进行类型转换 -->
    <blog-post :author="{ name: 'Veronica ya',company: 'Veridian Dynamics'}"></blog-post>

    <!-- 用一个变量进行动态赋值。-->
    <blog-post :author="post.author"></blog-post>

单向数据流

所有的 prop 都使得其父子 prop 之间形成了一个单向下行绑定: 父级 prop 的更新会向下流动到子组件中,但是反过来则不行。

不应在子组件内部改变prop的值,可以赋值给一个新的变量。

Prop 的大小写命名

HTML 中的 attribute 名是大小写不敏感的,camelCase (驼峰命名法) 的 prop 名需要使用其等价的 kebab-case (短横线分隔命名) 命名。

<script>
  <!-- 子组件componentA -->
  export default {
    props: ['postTitle']
  }
</script>
<!-- 父组件 -->
<componentA post-title="hello!"></componentA>

总结:

Props 用于父子组件传值, 直接赋值传递的是字符串值,使用v-bind传递变量,或者表达式,以进行类型转换传值。