Redux —我如何理解?

初次见到Redux时,乍一看似乎有些令人不知所措。 但是,如果您想有效地使用Redux,则必须了解它的工作原理以及其核心要素。 状态…动作…减速器…存储…在今天的帖子中,我想向您介绍Redux,以便您可以了解其工作原理。

什么是Redux?

如果您完全不熟悉Redux,则可能需要先检查Redux文档。

Redux是JavaScript应用程序的可预测状态容器。

它可以帮助您编写性能一致,在不同环境(客户端,服务器和本机)中运行且易于测试的应用程序。 最重要的是,它提供了出色的开发人员体验,例如实时代码编辑和时间旅行调试器的结合。

请记住,您无需成为Web开发人员即可在您的应用程序中使用类似Redux的架构。 在各种平台上都有很多这样的想法,ReSwift就是其中之一。

档案(州)

如果我问您,应用程序中的状态是什么样的,那么很难立即解释它。 一些值存储在视图模型中,有些存储库也存储一些值……哦! 那里的类​​知道当前正在登录的用户。但是,如果在这样的问题之后我们可以立即显示应用程序的状态呢? 对我们来说,以这种方式订购的应用程序难道不是很容易吗? 在这种情况下,Redux会为我们提供解决方案。

想象一下,您的状态就像存档,您完全知道在哪里寻找事物,并将其存储在一个结构中。 当然,具有较大的结构并不表示将是一团糟。 您可以将状态存储在归档抽屉中,这些抽屉将代表登录屏幕,设置屏幕等的状态。

字母(动作)

所以……现在我们的档案中有一个整齐的结构化状态,所有内容都很干净,并且易于推理。 但是,正如您可能期望的那样,我们的用户很有可能希望以某种方式更改此状态(我想这并不是什么新鲜事物)。 我们该如何处理? 好吧,我们不能直接访问我们的应用程序状态并更改我们想要的内容。 那不是您使用干净存档的方式……让我们想象一下我想更改我的地址。 我不能只是走进市政厅去玩他们的档案。 我需要写一个正式的字母。

标题:约翰·多伊(John Doe)—地址更改

您好,我刚搬到另一所房子。 我目前的地址是Art Street 10。

不用担心,当我们更改应用程序的状态时,我们只需要关键信息。 因此可能看起来像这样:

但是,有时我们无法立即准备此类信件,因为我们还没有所有必需的数据。 当我需要执行http请求时,我还不知道响应。 对于这种情况,我们必须聘请会计师。 他们将完成所有工作,然后代表我们发送一封信。 例如,在收到服务器的响应后,他们将在信中填写所需的信息并将其发送给我们。

信准备好后,您必须将其发送到市政厅。 有很多人在这里工作,照顾各种事情。 有些人处理您的地址信息,有些人处理您的汽车登记等……他们用您来信中的数据更新档案后,他们会通知您,以便您例如可以更新待办事项列表并划掉“更改地址” …或更新您的Facebook状态。 应用程序内部的reducers也是如此。 如果创建了新状态,则将通知所有对此更新感兴趣的地方。

市政厅员工(减速机)

正如我说的那样,在市政厅里,有很多人在照顾各种事情。 这些是我们应用中的减速器。 想象一下,在收到我们的信之后,该信将交给cityHallDirector,后者将其呈现给该市政厅中的每个工人。 他们中的一些人会看一下它,而只是忽略它,因为他们看到他们不熟悉该标题。 但是到某个时候,会有人说:“哦! 我负责地址更改,我必须处理!”。 请记住,要求市政厅工作人员进行任何更改的唯一方法是给他们这样的信件。

“……”是点差运算符。 您可以 在此处 了解更多信息

处理完您的来信后,新档案将退还给导演,然后由导演将其退还给市政厅。 重要的是市政厅工作人员一次只能处理一封信,因此您必须确保他们工作得尽可能快。 在市政厅馆长收到其工作人员的所有回复后,他将向市政厅提供新的档案。 市政厅将清除旧档案,并用新档案替换。

摘要

因此,这些是Redux架构的核心元素。

存档 -在我们的应用程序中注明

发送信件 -带有有效载荷的调度动作将导致状态更改。

会计师 -动作创作者

市政厅 —包含当前状态和将创建新状态的reduce的应用程序商店。

市政厅工作人员 -知道如何通过使用当前状态和操作来创建新状态的减速器。

我希望这将有助于一些新来者了解redux的工作原理及其元素的职责。