当前位置: 首页 > Web前端 > JavaScript

微信使用H5公众号NannyState在AsukaJavaScript中搭建障碍进行简单的状态管理(下)

时间:2023-03-27 16:31:13 JavaScript

【TG_duoteJG】版权所有duotee,duotee,duoteestudio为帮助障碍搭建和使用VanillaJS而编写的小GT江湖库轻松搭建一个基于微信小鸟状态的H5扫码Web应用。它类似于MicrocastReact,但开销要小得多,并且需要学习新的Tesla语法。它还使用单个反阻塞应用程序范围的公众号状态对象,而不是每个单独的组件都有自己的修复维护状态。它受到HyperApp的启发,与Elm有许多相似之处。在这篇文章中,我将解释NannyState的工作原理,然后通过一些示例来演示它的功能。单向数据流NannyState采用单向数据流模型,它由3部分组成:State——一个存储所有应用程序数据的对象View——一个根据当前状态返回一串HTML的函数Update——一个函数改变状态和重新渲染视图的唯一方法是在NannyState中,状态就是一切。状态对象是应用程序的唯一真实来源——应用程序数据的每一位都是该对象的一个??属性。甚至视图中使用的事件处理程序也是状态对象的方法。视图将状态表示为HTML。它在状态更改时更改并允许用户与应用程序交互。Update函数是更改状态的唯一方法。它是更新状态的单一入口点,并确保更改是确定性的、一致的和可预测的。在NannyState中构建您的应用程序只需要这3件事。事实上,可以通过问自己以下3个问题来总结:我的应用程序中需要存储哪些数据?这样就构成了State对象的属性我要如何在页面上展示app数据呢?这将帮助您创建View函数当用户与之交互时,应用程序数据将如何变化?为此,更新将需要HelloNannyState功能!了解NannyState工作原理的最简单方法是编写一些代码!我们将从一个基本示例开始,然后尝试制作更复杂的东西。运行下面的示例最简单的方法是使用像CodePen这样的在线代码编辑器,或者您可以通过nanny-state使用NodeJS安装包在本地运行它。将以下代码复制到CodePen的JS部分:import{保姆,html}来自'https://cdn.skypack.dev/nanny-state';const查看=状态=>html`<h1<跨度风格="color:#c792ea">>你好${state名称}h1>`常量声明={名称:"保姆州",查看}跨度>常量更新=保姆(状态)这显示了Nanny-State的3个部分如何协同工作让我们分别仔细看看每个部分:const查看=状态=>html`<h1>你好${状态.名称}<跨度风格=“合作lor:#c792ea">h1`Nannystate使用μhtml渲染HTML。View函数总是接受一个state对象作为它唯一的参数。然后它使用htmlμhtml提供的函数从模板创建它作为HTML参数提供的文字。使用模板文字意味着我们可以使用${variable}符号将状态属性插入视图。在本例中,我们使用它将属性的值插入到元素名称中。`

const状态={名称:“保姆状态”,查看}/span>State对象是存储所有应用程序数据的地方。View其中包括在应用程序的生命周期中将显示并可能更改的任何属性和值,例如本例中的name属性。请注意,View也是使用对象简写表示法的State的属性。请记住,状态就是一切——应用程序的每个部分都是状态的属性。常量更新=保姆(状态)最后一行将函数定义为Update函数的返回值Nanny。现在可以使用它来更新状态。事实上,这是更新任何属性的唯一方法。状态它也基于状态查看。这意味着将显示一个标头,上面写着“HelloNannyState”,如下面的CodePen所示:HelloNannyState这个示例基本上只是一个静态页面。让我们通过添加一个输入框使其动态化,该输入框允许用户输入他们想要的问候语名称。更新代码,使其如下所示:import{保姆,html}来自'https://cdn.skypack.dev/nanny-state';const查看=状态=>html`<h1<跨度风格=“颜色:#c792ea">>你好${state。名字}h1><输入输入=${state.changeName<跨度样式="color:#c792ea">}>`constchangeName=事件=>更新({名称:事件.目标.值})常量状态=<跨度麦粒肿le="color:#c792ea">{名称:"保姆州",更改名称,查看const更新=保姆(State)在此示例中,我们向视图添加一个元素。事件侦听器是在视图中内联定义的,因此在本示例中,只要检测到任何输入,我们都会将oninput事件侦听器附加到元素,这将调用事件处理程序,它是changeName状态对象的一个??方法。这个事件监听器需要定义,所以让我们仔细看看它:constchangeName=事件=>更新({名称:事件.目标.value})这是香草编写的JS标准事件处理程序。它像往常一样接受一个事件对象作为参数,当它被调用时,我们想要更新State对象,所以我们使用Update函数,因为这就是我们更新State的方式。我们提供给Update函数的参数是一个对象,它包含了我们想要在状态中更新的任何属性和相应的新值。在这种情况下,我们希望将名称属性更新为用户在输入字段中输入的值,该输入字段是事件对象的一部分并使用event.target.value。这将使用输入字段中的新值更新状态并立即重新呈现页面。使用μhtml渲染意味着只有视图中实际发生变化的部分会得到更新。这意味着在状态更新后重新渲染是高效和快速的。就是这样-你的第一个NannyState应用程序!尝试打字,您会看到它对用户输入的反应有多快……而且只需要几行代码。您可以在下面的CodePen中看到代码:DynamictypingNannyStatemakesitsupereasytowritestate-basedreactiveapplications。如您所见,构建一个对用户交互做出反应的基于动态状态的应用程序并不需要太多代码。这就是保姆州的美丽之处。