美文网首页
Vue&React在Props上的处理

Vue&React在Props上的处理

作者: 睦月MTK | 来源:发表于2020-05-12 10:35 被阅读0次

    声明:


    1.在Props的传入方式上

    Vue:

    • Vue的Props分为两种
      • 第一种是在组件内部用props定义过的属性,这些属性被传入时,组件内部可以使用this.attrName来访问对应的属性值
      this.props = ['title']
      
      • 第二种是在未在组件内部定义过的属性,这些属性会被放入到this.$attrs

    React:

    • React的所有Props都会被传入组件内的this.props中,使用时,用this.props.attrName就可以直接访问

    2.在传入的Props更新时

    当传入的Props更新时,Vue和React都会触发组件的更新,不同的是,React提供一个shouldComponentUpdate方法让你自行判断是否需要更新。


    3.在组件内部更新Props时

    Vue:

    • Vue允许在组件内部更新Props,但是并不建议这么做,因为父组件更新时,子组件内的所有Props将回归初始值

    React:

    • React绝不允许在内部更改Props,并且强调要达到同样目的,请使用this.state

    4.组件上定义的Props是否会显式显示在组件的根元素上

    Vue:

    • 如果是组件内部定义过的属性,那么根元素上会显示一对特殊的键值,如data-v-407e15fa="",如果不是内部定义过的属性,那么该属性会自然的显示在组件的根元素上
    • 由于有上述的特点,故Vue存在属性继承的说法,对于非classstyle的属性来说,组件上定义的属性会覆盖组件根元素上定义的属性,而那特殊的两个将会执行合并操作。
    • Vue给组件提供了inheritAttrs选项,当该值为false时,将会禁用属性的继承,效果和React差不多,区别是对于classstyle是无效的,这两个还是会继承合并

    React:

    • 在组件上定义任何属性都不会显示在组件的根元素上

    5.在Props传入的类型上

    都支持多种类型值的传入,Vue支持以v-bind结合的属性传入方式和以JSX方式的属性传入方式,React支持JSX方式的属性传入方式
    Vue:

    • v-bind结合的传入方式(以传入一个Date对象为例)
    <mtk-clock title="mtk" :date="date"></mtk-clock>
    

    注意只可以用在模板语法上,用在JSX上会报错。再,如果想一次性传入一个对象的所有属性作为Props,可以使用v-bind="object"

    • 以JSX方式
    <mtk-clock title="mtk" date={date}></mtk-clock>
    

    React:

    • 以JSX方式(略)

    6.额外

    如果Vue使用模板语法来传入Props的话,那Props还支持类型校验,具体请看Prop验证


    参考文档:

    相关文章

      网友评论

          本文标题:Vue&React在Props上的处理

          本文链接:https://www.haomeiwen.com/subject/ksuvnhtx.html