<返回更多

Hyperapp微框架为何会火?因为体积仅 1kb ?

2023-11-26  今日头条  高级前端进阶
加入收藏

今天给大家带来的主题是 HyperApp.js,即一个用于构建超文本应用程序(hypertext applications)的微型、轻量级 JAVAscript 框架。话不多说,直接进入正题!

1.什么是 Hyperapp

Hyperapp 是一个用于构建超文本应用程序(hypertext applications)的微型、轻量级 JavaScript 框架,用于开发功能丰富的 Web 应用程序,本身用 ES5 编写。

The tiny framework for building hypertext applications.

Hyperapp 应用需要在系统上安装 Node.js、NPM、JSX 和 Webpack 模块,然后才能开始构建 Web 应用程序(可以在参考文献中查看如何开启Hyperapp应用之旅)。 Hyper App 框架背后的决策是最大限度地减少更简单软件代码的依赖和使用。

Hyperapp微框架为何会火?因为体积仅 1kb ?

 

与市场上的其他框架,如: React、Preact、Vue、Ember、Mithril 等相比,HyperApp 框架有非常紧凑的 API,具有最小的包大小和内置状态管理,同时拥有坚实的基础和重要的社区支持。开发者还可以参与 Hyperapp 在线社区支持,以开发 Hyperapp 一个强大的前端 JavaScript 框架。

Hyperapp 框架的兴起主要基于以下理念:

目前 Hyperapp 在 Github 上通过 MIT 协议开源,有超过 19k 的 star、0.8k 的 fork、2.7k 的项目依赖量,100+的代码贡献者,是一个值得关注的前端开源项目。

2.Hyperapp 框架构成与特性

2.1 Hyperapp 框架构成

Hyperapp 软件包以对 Hyperapp 有意义的方式提供对 Web 平台 API 的访问。

Hyperapp微框架为何会火?因为体积仅 1kb ?

 

下面是不同 Hyperapp 包的具体功能:

2.2 Hyperapp 特性

上文或多或少提到 HyperApp 框架的一些优秀特征,可以更加细致的拆分为以下几个点。

3.简要介绍 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 函数,可渲染自身以及允许触发的操作。 这些函数与框架无关,非常易于测试和调试。

4.使用 Hyperapp 的简单示例

安装

npm install hyperapp

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。

5.本文总结

本文主要和大家介绍 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/

关键词:Hyperapp      点击(6)
声明:本站部分内容来自互联网,如有版权侵犯或其他问题请与我们联系,我们将立即删除或处理。
▍相关推荐
更多Hyperapp相关>>>