看 vue-router 官网对这个知识点无法理解:
官网:在组件中使用 $route 会使之与其对应路由形成高度耦合,从而使组件只能在某些特定的 URL 上使用,限制了其灵活性,使用 props 将组件和路由解耦。
问题:用 props 来接受 route.params 参数,这么做的好处除了能使函数式编程也能接受到路由参数以外,还有什么好处么?
官网:请尽可能保持 props 函数为无状态的,因为它只会在路由发生变化时起作用。如果你需要状态来定义 props,请使用包装组件,这样 Vue 才可以对状态变化做出反应。
问题:如果要定义一个有状态的 props 函数,是否就是得到的值可以通过 props 函数外部进行修改,那么为什么只有包装组件才可以对状态变化作出反应?包装组件是否是通过函数式组件(无响应式数据组件)将多个组件包装成一个组件?比如官网中的一段示例代码:
var EmptyList = { /* ... */ }
var TableList = { /* ... */ }
var OrderedList = { /* ... */ }
var UnorderedList = { /* ... */ }
Vue.component('smart-list', {
functional: true,
props: {
items: {
type: Array,
required: true
},
isOrdered: Boolean
},
render: function (createElement, context) {
function appropriateListComponent () {
var items = context.props.items
if (items.length === 0) return EmptyList
if (typeof items[0] === 'object') return TableList
if (context.props.isOrdered) return OrderedList
return UnorderedList
}
return createElement(
appropriateListComponent(),
context.data,
context.children
)
}
})
登录后可查看更多问答,登录/注册