Composition api
Why Composition api?
普通的options式的组件在一开始维护的时候都是简单并且干净的。但是当我们维护了一段时间以后会发现,我们的维护变得困难起来,由于option的问题,会导致我们的数据内容会有很多的副作用(watch,computed)和耦合(methods)。如果我们选择使用functional component也许会让我们的内容变得简单,并且不同的逻辑可以通过不同的分区去区分,但是由于functional component本身是无状态的,会让我们实现的选择面大大减小。Composition Api 提供了解决方案给我们。
setup
composition api的入口,我们所有的内容都可以写在setup这里,setup可以返回`{}`,并且返回的内容都可以被组件任何地方使用,同时这里也可也返回jsx`( ) => { return <div>jsx</div> }`。
在setup中没有生命周期函数,没有计算属性等等特性,取而代之的都是composition api。
setup的arguments
setup方法传入两个参数,一个是props,一个是context。
`setup(props,context){}`
props
由于props是reactive的所以我们不能解构赋值,因为结构赋值可能会破坏响应性。如果我们需要结构赋值,我们可以通过`toRefs`函数来完成次操作
`const { title } = toRefs(props) //title.value`
如果title是可选的字段props中可能没有title,我们就需要使用`toRef`
`const title = toRef(props, 'title')`
context
context是一个普通的对象,他暴露给组件三个property:**attrs** **slots** **emit**。由于context是一个普通的对象,所以我们可以放心的结构赋值`const {attrs, emit, slots} = context`。于此同时attrs和slots是有状态的对象,要避免对他进行结构赋值,并且如果你们想要根据attrs和slots改变时更改应用副作用,应该在生命钩子函数onUpdated中去更改
this
在setup中this的并不是指向当前的活跃实例!!!!,不要和其他选项中的this混淆
生命周期函数


浙公网安备 33010602011771号