- xml - AJAX/Jquery XML 解析
- 具有多重继承的 XML 模式
- .net - 枚举序列化 Json 与 XML
- XML 简单类型、简单内容、复杂类型、复杂内容
套接字在Flux单向数据流中的适合位置是什么?我已经阅读了两种关于远程数据应进入Flux单向数据流的思路。我看到的是获取Flux应用程序的远程数据的方式是在进行服务器端调用时,例如,在一个 promise 中,然后将其解决或拒绝。在此过程中可能会触发三种可能的操作:
(FooActions.BAR)
(FooActions.BAR_SUCCESS)
(FooActions.BAR_ERROR)
最佳答案
在将Flux与WebSocket或普通的旧HTTP请求/轮询一起使用时,实际上没有任何区别。您的商店负责在应用程序状态更改时发出更改事件,并且如果该更改来自UI交互,WebSocket或发出HTTP请求,则不应从商店外部看到该事件。这实际上是Flux的主要优点之一,因为无论在何处更改应用程序状态,它都会通过相同的代码路径。
一些Flux实现倾向于使用 Action / Action 创建者来获取数据,但是我并不完全同意。
操作是发生的事情,它们会修改您的应用程序状态。诸如“用户更改了一些文本并点击保存”或“用户删除了项目”之类的东西。可以将操作想像成数据库的事务日志。如果您丢失了数据库,但是保存并序列化了所有曾经发生的操作,则可以仅重播所有这些操作并最终获得与丢失的状态/数据库相同的状态。
因此,诸如“给我ID为X的项目”和“给我所有项目”之类的不是行动,而是问题,是关于该应用程序状态的问题。在我看来,应该是商店通过您在这些商店中公开的方法来回答这些问题。
使用 Action / Action 创建者进行获取是很诱人的,因为获取需要异步。通过将异步内容包装在操作中,您的组件和存储可以完全同步。但是,如果这样做,则会模糊 Action 的定义,并迫使您假设您可以将整个应用程序状态放入内存(因为只有在内存中有答案的情况下,您才可以同步响应)。
因此,这就是我如何看待助焊剂和不同概念的方法。
存储
这显然是您的应用程序状态所在的地方。商店封装并管理状态,并且是该状态发生突变的唯一位置。当状态改变时,它也是发出事件的地方。
商店还负责与后端进行通信。当状态更改并且需要与服务器同步时,存储与后端进行通信,并且在需要内存中没有的数据时,也与服务器进行通信。它具有get(id)
,search(parameters)
等方法。这些方法用于您的问题,即使状态可以放入内存中,它们也都返回promise。这很重要,因为您可能会遇到用例,该用例的状态不再适合内存,或者无法在内存中进行过滤或进行高级搜索。通过从问题方法返回 promise ,您可以在从内存返回或询问后端之间进行切换,而不必在商店外进行任何更改。
操作
我的 Action 非常轻巧,他们对持久化封装的突变一无所知。它们只是承载从组件到商店的变异的意图。对于较大的应用程序,它们可以包含一些逻辑,但不能包含服务器通信之类的东西。
组件
这些是您的React组件。他们通过在商店上调用问题方法并呈现这些方法的返回值来与商店进行交互。他们还订阅商店公开的change
事件。我喜欢使用高阶组件,这些组件只是包装另一个组件并将 Prop 传递给它。一个例子是:
var TodoItemsComponent = React.createClass({
getInitialState: function () {
return {
todoItems: null
}
},
componentDidMount: function () {
var self = this;
TodoStore.getAll().then(function (todoItems) {
self.setState({todoItems: todoItems});
});
TodoStore.onChange(function (todoItems) {
self.setState({todoItems: todoItems});
});
},
render: function () {
if (this.state.todoItems) {
return <TodoListComponent todoItems={this.state.todoItems} />;
} else {
return <Spinner />;
}
}
});
var TodoListComponent = React.createClass({
createNewTodo: function () {
TodoActions.createNew({
text: 'A new todo!'
});
},
render: function () {
return (
<ul>
{this.props.todoItems.map(function (todo) {
return <li>{todo.text}</li>;
})}
</ul>
<button onClick={this.createNewTodo}>Create new todo</button>
);
}
});
TodoItemsComponent
是更高阶的组件,它包装了与商店进行通信的细节。提取待办事项后,它会渲染
TodoListComponent
,并在此之前渲染一个微调框。由于它会将待办事项作为
TodoListComponent
的 Prop 传递,因此该组件仅需专注于渲染,并且只要商店中发生任何更改,它都将被重新渲染。渲染组件保持完全同步。另一个好处是
TodoItemsComponent
只专注于获取数据并将其传递,从而使其可用于需要待办事项的任何渲染组件。
关于javascript - 套接字在Flux单向数据流中的适合位置是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30474083/
我正在尝试构建一个应用程序 A(如适配器),它将: 1)接收带有某些 key (JSON格式)的POST请求 2) 它应该以某种方式修改该 key 并向另一个系统 B 创建 POST 请求。 3)应用
除了语义之外,是否有任何理由为 View 和服务器操作创建不同的调度方法?我见过的所有教程和示例(最值得注意的是 this )在监听已分派(dispatch)的有效负载时完全忽略源常量,以支持打开有效
我的密码 https://gist.github.com/ButuzGOL/707d1605f63eef55e4af 因此,当我收到登录成功回调时,我想进行重定向, 重定向也可以通过调度程序进行。 我
我试图找出使用 Flux 架构处理中型复杂应用程序中相当常见的情况的最佳方法是什么,当组成数据的模型之间存在依赖关系时如何从服务器检索数据。例如: 商店网络应用程序,具有以下模型: 购物车(用户可以拥
我有点坚持一项琐碎的任务:每当我使用响应式 spring WebClient 查询外部 API 或查询响应式 MongoDBRepository 时,我想记录有多少实体通过了我的通量,例如。记录消息,
我有这种情况。我有一个分页 API,它为我提供了过去 12 个月的数据。 API 的响应如下: public class PagedTransfersDto { private List cont
我有两个 Flux,一个用于成功元素,另一个用于保存错误元素 Flux success= Flux.just("Orange", "Apple", "Banana","Grape", "Strawbe
我现在正在使用 Flux .我想创建一个 Flux来自两个不同的对象 Flux .我知道我必须使用 BiFunction但我不知道怎么办。第一个对象对第一个对象有 PK,第二个 FK。我想压缩 PK=
我们正在重构一个大型 Backbone 应用程序以使用 Flux 来帮助解决一些紧密耦合和事件/数据流问题。但是,我们还没有弄清楚如何处理需要知道特定 ajax 请求状态的情况 当 Controlle
作为主题,Flux.concatMapIterable 和 Flux.flatMapIterable 都不会根据大理石图交错,这与 Flux.concatMap 和 Flux.flatMap 其中 f
我有一个flux这是由 Iterable 构建的8 个元素 ( Flux.fromIterable(..) )。对于每个通量排放,我想异步调用一个方法。我尝试了各种方法 dispatchOn和publ
Mono mono1 = repository.get(id); // data from reactive mongo Flux availabilityInfo = getAvailability
使用同构应用程序设置应用程序初始状态的一般做法是什么?如果没有 Flux,我会简单地使用类似的东西: var props = { }; // initial state var html = Reac
你好,我的代码是这样的: fun mapBatch(batch: List): Mono> ... fun myFun(stream: Flux): Flux { return stream
所以我从文档中了解到,并行 Flux 本质上是将通量元素划分为单独的轨道。(本质上类似于分组)。就线程而言,这将是调度程序的工作。因此,让我们考虑这样的情况。所有这些都将在通过 runOn() 方法提
我一直看到使用 flatMap 的例子对于 1 对 1 操作,例如: Flux.just("a", "b", "c") .flatMap(s -> Mono.just(s.toUpperCas
Flux.create 和有什么区别和 Flux.generate ?我正在寻找 - 最好是使用示例用例 - 了解我何时应该使用其中一个。 最佳答案 简而言之: Flux::create doesn'
我想发布 key 列表,但仅限于修改 key 时。 通过以下内容,即使没有任何更改,它也会以无限循环的方式发布值 RedisReactiveCommands commands = connec
我正在尝试从我从服务器获得的许多项目中实现无限滚动,但我找不到任何适当的方法来保持通量架构设计规则。 想法是:在第一次加载时,我从服务器获取完整的项目列表(只有 id),然后使用 ajax 每次获取
我有端点:/upstreams 它将返回以下格式的 Json: { "next" : "String", "data" : [ { "id" : "String",
我是一名优秀的程序员,十分优秀!