微信使用H5公众号Nanny State在飞鸟JavaScript中进行盘口搭建简单的状态管理(上)


  【TG_duoteJG】多特工作室杰哥duotee版权所有,禁止转载

公众号H5搭建Nanny State是我编写的一个GT江湖小型库,旨在帮助盘口搭建使用Vanilla JS轻松构建基于微信飞鸟状态的H5扫码Web应用程序。它类似于微投 React,但开销要少得多,并且需要学习新的特斯拉语法。它还使用单个防封应用程序范围的公众号状态对象,而不是每个单独的组件都有自己的修复维护状态。它受到 HyperApp 的启发,与 Elm 有许多相似之处。

在这篇文章中,我将解释 Nanny State 的工作原理,然后通过几个示例演示它可以做什么。

单向数据流
Nanny State 使用单向数据流模型,由 3 个部分组成:

状态 ——存储所有应用数据的对象
View  – 根据当前状态返回一串 HTML 的函数
更新 ——一个函数,它是改变状态和重新渲染视图的唯一方法

在Nanny State,国家就是一切。状态对象是应用程序的唯一真实来源——应用程序数据的每一位都是该对象的属性。甚至视图中使用的事件处理程序也是状态对象的方法。

视图是将状态表示为 HTML。它会在状态发生变化时发生变化,并允许用户与应用程序交互。

Update 函数是改变状态的唯一方法。它是更新状态的单一入口点,并确保更改是确定性的、一致的和可预测的。

这 3 件事是您在 Nanny State 中构建应用程序所需的全部内容。其实可以通过问自己以下3个问题来总结:

我需要在我的应用程序中存储哪些数据?这将构成 State 对象的属性
我希望如何在页面上显示应用数据?这将帮助您创建 View 函数
当用户与之交互时,应用数据将如何变化?Update 为此将需要该 功能
你好保姆州!
了解 Nanny State 如何工作的最简单方法是编写一些代码!我们将从一个基本示例开始,然后尝试使一些更复杂的东西。

运行以下示例最简单的方法是使用 CodePen 等在线代码编辑器,或者您可以通过 nanny-state 使用 NodeJS 安装包在本地运行它。

将以下代码复制到 CodePen 的 JS 部分:

import { Nanny,html } from 'https://cdn.skypack.dev/nanny-state';

const View = state => html`<h1>Hello ${state.name}h1>`

const State = {
  name: "Nanny State",
  View
}

const Update = Nanny(State)

这显示了 Nanny-State 的 3 个部分如何协同工作。让我们分别仔细看看每个部分:


const View = state => html`<h1>Hello ${state.name}h1>`

Nanny state 使用 µhtml 来呈现 HTML。该 View 函数 始终 接受状态对象作为其 唯一 参数。然后它使用 html µhtml 提供的函数根据作为参数提供的模板文字创建 HTML。

使用模板字面量意味着我们可以使用 ${variable} 符号将状态的属性插入到视图中。在这个例子中,我们使用它 在 元素name 内插入属性 的值。`

const State = { name: "Nanny State", View }

该 State 对象是 所有 应用程序数据的存储位置。View 它包括将在应用程序的生命周期中 显示并可能更改的任何属性和值 ,例如name 本示例中的属性。

请注意,这 View 也是 State using 对象速记符号的一个属性。请记住 ,状态就是一切 ——应用程序的每个部分都是状态的属性。


const Update = Nanny(State)

最后一行将函数定义为 Update 函数的返回值 Nanny 。这现在可用于更新 State. 事实上,这是  可以更新 任何属性 的唯一方法。State它还 View 根据 State. 这意味着将显示一个标题,上面写着“Hello Nanny State”,如下面的 CodePen 所示:

你好保姆州

这个例子基本上只是一个静态页面。让我们通过添加一个输入框来使其动态化,该输入框允许用户输入他们想要打招呼的名字。更新代码,使其如下所示:


import { Nanny,html } from 'https://cdn.skypack.dev/nanny-state';

const View = state => html`<h1>Hello ${state.name}h1><input oninput=${state.changeName}>`

const changeName = event => Update({name: event.target.value})

const State = {
  name: "Nanny State",
  changeName,
  View
}

const Update = Nanny(State)

在这个例子中,我们添加了一个  元素到 View. 事件侦听器是在视图中内联定义的,因此在此示例中,我们将 oninput 事件侦听器附加到  元素。每当检测到任何输入时,这将调用作为 changeName 状态对象的方法的事件处理程序。这个事件监听器需要定义,所以让我们仔细看看它:


const changeName = event => Update({name: event.target.value})

这是一个用 Vanilla JS 编写的标准事件处理程序。它像往常一样接受一个事件对象作为参数,当它被调用时,我们想要更新 State 对象,所以我们使用该 Update 函数,因为这是我们可以更新 State.

我们提供给 Update 函数的参数是一个对象,其中包含我们想要在状态中更新的任何属性以及相应的新值。在这种情况下,我们希望将 name 属性更新为用户在输入字段中输入的值,该字段是事件对象的一部分并使用 event.target.value. 这将使用输入字段中的新值更新状态并立即重新呈现页面。使用 µhtml 进行渲染意味着只有 View 实际更改的部分才会得到更新。这意味着State 更新后的重新渲染既高效又快速。

就是这样——你的第一个 Nanny State 应用程序!试试打字,你会看到它对用户输入的反应有多快……而且只需几行代码。您可以在下面的 CodePen 中看到代码:

动态输入

Nanny State 让编写基于状态的响应式应用程序变得超级容易。如您所见,构建对用户交互作出反应的基于动态状态的应用程序不需要太多代码。这就是保姆州的美丽。

你可能感兴趣的:(javascript)