今天给大家带来的主题是 HyperApp.js,即一个用于构建超文本应用程序(hypertext applications)的微型、轻量级 JAVAscript 框架。话不多说,直接进入正题!
Hyperapp 是一个用于构建超文本应用程序(hypertext applications)的微型、轻量级 JavaScript 框架,用于开发功能丰富的 Web 应用程序,本身用 ES5 编写。
The tiny framework for building hypertext applications.
Hyperapp 应用需要在系统上安装 Node.js、NPM、JSX 和 Webpack 模块,然后才能开始构建 Web 应用程序(可以在参考文献中查看如何开启Hyperapp应用之旅)。 Hyper App 框架背后的决策是最大限度地减少更简单软件代码的依赖和使用。
与市场上的其他框架,如: React、Preact、Vue、Ember、Mithril 等相比,HyperApp 框架有非常紧凑的 API,具有最小的包大小和内置状态管理,同时拥有坚实的基础和重要的社区支持。开发者还可以参与 Hyperapp 在线社区支持,以开发 Hyperapp 一个强大的前端 JavaScript 框架。
Hyperapp 框架的兴起主要基于以下理念:
目前 Hyperapp 在 Github 上通过 MIT 协议开源,有超过 19k 的 star、0.8k 的 fork、2.7k 的项目依赖量,100+的代码贡献者,是一个值得关注的前端开源项目。
Hyperapp 软件包以对 Hyperapp 有意义的方式提供对 Web 平台 API 的访问。
下面是不同 Hyperapp 包的具体功能:
上文或多或少提到 HyperApp 框架的一些优秀特征,可以更加细致的拆分为以下几个点。
前文讲述过,Hyperapp 框架包含了三种相互关联的方法,即:状态、操作和视图。
下面是一个简单的 Hello World 示例:
import { h, app } from "hyperapp"
const state = { title: "Hi." }
const actions = {}
const view = state => {state.title}
app(state, actions, view, document.body)
代码绑定简单的 HTML 输入:
import { h, app } from "hyperapp"
const state = {
text: "Hello!"
}
const actions = {
setText: text => ({ text })
}
const view = (state, { setText }) => (
<mAIn>
{state.text.trim() === : state.text}
<input
autofocus
value={state.text}
oninput={e => setText(e.target.value)}
/>
</main>
)
app(state, actions, view, document.body)
用户在 Web 应用程序上触发操作,操作函数被调用,并负责用新状态替换先前状态并更新。 当操作触发并在用户界面(视图)上进行更改时,状态会异步更新。
HyperApp 包含无状态组件,这些组件是纯 JavaScript 函数,可渲染自身以及允许触发的操作。 这些函数与框架无关,非常易于测试和调试。
npm install hyperapp
<script type="module">
import { h, text, app } from "https://unpkg.com/hyperapp"
const AddTodo = (state) => ({
...state,
value: "",
todos: state.todos.concat(state.value),
})
const NewValue = (state, event) => ({
...state,
value: event.target.value,
})
app({
init: { todos: [], value: "" },
view: ({ todos, value }) =>
h("main", {}, [
h("h1", {}, text("To do list")),
h("input", { type: "text", oninput: NewValue, value }),
h("ul", {},
todos.map((todo) => h("li", {}, text(todo)))
),
h("button", { onclick: AddTodo }, text("New!")),
]),
node: document.getElementById("app"),
})
</script>
<main id="app"></main>
应用程序首先设置初始状态并在页面上渲染视图。 用户输入( User input flows)流入操作(actions)进而更新状态,最终使得 Hyperapp 重新渲染视图。
当描述页面在 Hyperapp 中的视图时,开发者不是直接编写 markup。 相反,Hyperapp 使用 h() 和 text() 来创建 DOM(或简称为虚拟 DOM)的轻量级表示,而 Hyperapp 负责有效地更新真实 DOM。
本文主要和大家介绍 HyperApp,即一个用于构建超文本应用程序(hypertext applications)的微型、轻量级 Javascript 框架。相信通过本文的阅读,大家对 HyperApp 会有一个初步的了解。
HyperApp 保持轻量级,易于使用,代码行数较少,对于不想编写代码或想快速创建应用程序的开发者值得考虑使用 HyperApp。 对于较小的应用程序来说,HyperApp 可能是更好的选择,但是不推荐将 HyperApp 用于复杂的应用程序。 与 Redux 相比,Hyperapp 中的事件处理和更改组件状态很容易。 如果用户熟悉 Redux 框架,HyperApp 很容易学习,同时HyperApp 的生命周期与 React 类似,即 :oncreate、onupdate、onmove、ondestroy。
因为篇幅有限,关于 Radash 的更多用法和特性文章并没有过多展开,如果有兴趣,可以在我的主页继续阅读,同时文末的参考资料提供了大量优秀文档以供学习。最后,欢迎大家点赞、评论、转发、收藏,您的支持是我不断创作的动力。
https://github.com/jorgebucaran/hyperapp
https://www.xenonstack.com/insights/what-is-hyperapp
https://www.digitalocean.com/community/tutorials/js-hyperapp
https://blog.eduonix.com/web-programming-tutorials/everything-need-know-hyperapp-js/