应用实例
和大多数软件开发一样,我们有一个程序入口,可以通过createInstance
方法创建一个应用实例。
然后通过实例的render
方法挂载到真实的DOM
节点中。在一个页面中可以存在多个应用实例,比如可以在单元格中使用 Gyron 的渲染能力或者组件来复用代码。
基本用法
下面代码是createInstance
最简单的用法,我们创建了一个 div 元素,设置了 div 元素的内容,并且挂载到名为root
的 dom 节点上。
import { createInstance, h } from 'gyron'
createInstance(h('div', 'Gyron.js')).render('#root')
根节点
Gyron.js
允许有多个根节点,如果是多节点的情况我们会自动创建 Fragment Node。
import { createInstance, createFragment } from 'gyron'
createInstance(createFragment(['hello ', 'Gyron.js'])).render('#root')
// <div id="root">hello Gyron.js</div>
插件
我们的插件系统非常简单,甚至都不需要使用我们提供的createPlugin
方法,你可以自己创建一个上下文环境,然后通过自定义方法访问到插件实例即可。
后续我们会把插件实例和组件绑定起来,在遇到错误时更快的定位问题。也可以让插件干预组件的渲染,实现类似于“指令”的功能。
import { createInstance, createPlugin, usePlugin } from 'gyron'
const Type = Symbol('')
const customPluginData = /* createRouter */ null
const plugin = usePlugin()
plugin.set(Type, customPluginData)
后面在组件中就可以通过 usePlugin 方法得到 customPluginData。
import { usePlugin, FC } from 'gyron'
const App = FC(() => {
const context = usePlugin()
context.get(Type)
return /*...*/
})
生命周期
应用程序是有自己的生命周期,用户可以在自己的应用中使用生命周期勾子,更合理的管理自己的组件。
生命周期概念在市场上已经很常见,但在开发一款简单的应用未必能用到,暂时不用掌握。在构建一个复杂的应用程序时,生命周期勾子就展现了它的优势。比如在优化页面渲染时可以使用onBeforeUpdate
方法,它接受一个回调函数,并且必须返回一个 Boolean 值,如果返回一个Falsy
,渲染程序则会阻止当前组件以及子组件的更新。
每个生命周期勾子都可以注册多次,Gyron.js
会按照注册顺序顺序调用,但是onBeforeUpdate
除外,这个勾子在组件中只允许注册一次。