【pinia源码】一、createPinia源码解析

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了【pinia源码】一、createPinia源码解析相关的知识,希望对你有一定的参考价值。

参考技术A 【pinia源码】系列文章主要分析 pinia 的实现原理。该系列文章源码参考 pinia v2.0.14 。

源码地址: https://github.com/vuejs/pinia

官方文档: https://pinia.vuejs.org

本篇文章将分析 createPinia 的实现。

通过 createPinia 创建一个 pinia 实例,供应用程序使用。

createPinia 不接受任何参数,它会返回一个 pinia 实例。

源码位置: packages/pinia/src/createPinia.ts

在 createPinia 中首先会创建一个 effect 作用域对象(如果你不了解 effectScope ,可参考: RFC ),使用 ref 创建一个响应式对象。紧接着声明了两个数组 _p 、 toBeInstalled ,其中 _p 用来存储扩展 store 的所有插件, toBeInstalled 用来存储那些未 install 之前使用 pinia.use() 添加的的 plugin 。

然后声明一个 pinia 对象(这个 pinia 会使用 markRaw 进行包装,使其不会转为 proxy ),将其 return 。

这里重点看下 install 和 use 方法。

当使用 app.use(pinia) 时,触发 pinia.install 函数。在 install 中首先执行了 setActivePinia(pinia) ,它会将 pinia 赋给一个 activePinia 的全局变量。

然后会判断是不是 Vue2 环境。如果不是 Vue2 ,将 app 实例赋给 pinia._a ,然后将 pinia 注入到 app 实例,并将 pinia 设置为全局属性 $pinia 。如果此时 toBeInstalled 中有 plugins (在 install 之前添加的 plugins ),那么会把这些 plugins 添加到 pinia._p 中,添加完之后,置空 toBeInstalled 。

使用 use 方法可添加一个 plugin 以扩展每个 store 。它接收一个 plugin 参数,返回当前 pinia 。

如果 this._a 是空的,并且不是 Vue2 环境,会将 plugin 中暂存到 toBeInstalled 中,等待 install 时进行安装。否则,直接添加到 this._p 中。

你可能有疑问,在 install 、 use 中都判断了 Vue2 的情况,难道 pinia 没有处理 Vue2 的情况吗?其实并不是, pinia 提供了 PiniaVuePlugin 专门用来处理 Vue2 的情况。

如果是 Vue2 需要使用如下方式:

我们来看下 PiniaVuePlugin 的实现方式。

PiniaVuePlugin 通过向全局混入一个对象来支持 pinia 。这个对象有两个生命周期函数: beforeCreate 、 destory 。

在 beforeCreate 中设置 this.$pinia ,以使 vue 实例可以通过 this.$pinia 的方式来获取 pinia

[UVA]Pixhawk之姿态解算篇_源码姿态解算算法分析

一、开篇

        终于到ardupilot源代码的姿态解算了,有了前期关于mahony姿态解算算法的基础以后,理解源代码的姿态解算算法就快多了,所有的东西都在脑海中初步有了一个框架;首先要做什么,然后再做什么,再然后捏~~~反正容易上手的。

        2016.04.04日晚,别人都在嗨,而我却在实验室苦逼的工作着,今晚最大的收获就是发现了“新大陆”-----“北航可靠飞行控制研究组”,其喜悦之情绝不亚于哥伦布发现新大陆。他们才是专业的啊,看看他们毕业生的去向,不是研究所就是出国深造,好吧,人家才是专业搞科研的,不食人间烟火,那么问题来了:DJI的员工都是在哪招来的呢?!哎,我是俗人一个,经济基础决定上层建筑,好好学习才能挣大钱。最近他们开设了一门课程《多旋翼飞行器设计与控制》,课程体系安排的非常好,现在更新到第四讲了(听北航一个博士说只有PPT没有视频,感谢Mallin的帮助,成功打入内部),PPT也足够了,相当上档次啊,课程到2016.06.30结束,正好可以把无人机的整个架构理解完,找工作去~~~

        在下面的基础知识部分先分享一部分“北航”的研究成果,特别是气动方面的,以前一点概念都没有,只看着超跑的流线型非常炫酷,不知其原因,特此记录,大家共勉。


三、实验平台

Software Version:PX4Firmware

Hardware Version:pixhawk

IDE:eclipse Juno (Windows)

四、基础知识(均来自北航可靠飞行控制研究组)

1、无人机飞行的气动模型与分析

        1)多旋翼前飞情形:在下图中,因为螺旋桨的柔性,诱导的来流会产生阻力。

        如果多旋翼重心在桨盘平面下方,那么阻力形成的力矩会促使多旋翼俯仰角转向0度方向。

        如果多旋翼重心在桨盘平面上方,那么阻力形成的力矩会促使多旋翼俯仰角朝发散方向发展,直至翻转。因此,当多旋翼前飞时,重心在桨盘平面的下方会使前飞运动稳定。