- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我目前正在使用 React.JS 设计 Web 应用程序的架构。在 React 中,数据流是单向的。有时(经常)我们想在 View 之间进行交流。 React 使用 flux 解决了这个问题。到目前为止一切顺利,我现在拥有存储(共享)数据的商店。
现在我想知道 flux 是否也是这个老问题的正确解决方案:一个 View ,比如说一个表需要来自它应该呈现的服务器的数据。我对 React 没有那么多经验,因此请原谅我,如果这是一个愚蠢的问题,但是 flux 也是从服务器获取数据并将其解析为注册 View 的正确解决方案吗?如果是这样,是否有处理异步数据的最佳实践?如果不是,从服务器获取数据以进行 react View 的合适方法是什么?
我实际上不希望 View 调用数据。在我看来, View 应该尽可能愚蠢......
最佳答案
..is flux also the right solution for getting data from a server and parse it to the registered views?
您可以使用助焊剂来做到这一点。助焊剂是关于 Action Creators .在通量架构中,想法是你有一个 Controller View用 Store 注册自己. Controller View 是您的智能组件,它从 Store(s) 获取它的状态并且通常它呈现子组件,dumb组件,它传递(一些)声明为它的 child (ren)的属性。
例如,当您从服务器获取数据时,需要触发 Action Creator,此 Action Creator 随后将调用 Web API 实用程序来执行实际请求。成功后,Web API 实用程序将调用一个 Server Action Creator,它会分派(dispatch)一个包含从服务器接收到的有效负载的操作。然后任何已注册的 Store 将处理此操作并发出更改事件。这样,当 Store 的数据发生变化时,任何对 Store 感兴趣的 Controller View 都会收到通知。 Controller View 将更新其状态并重新呈现自身和任何 subview 以显示正确的数据。
这意味着您可以调用 Action Creator,例如在 Controller View 的 componentDidMount
方法中从服务器获取数据(请注意,此 Hook 只执行一次!)。最初,Controller View 将向 store 请求数据并获取,例如,一个空数组,该数组将被设置为 Controller View 的状态,而 Controller View 将呈现一些空的东西。然后在获取数据后,Controller View(由 Store 通知)将再次从 Store 中检索数据,只是现在它不会为空。 Controller View 相应地更新它的状态,触发重新渲染并显示适当的数据。
这一点的本质体现在这个最小的(伪)代码中:
// Action Creator: actions/data.js
import { fetchData } from '../utils/server';
export function fetch() {
fetchData();
}
// Server Action Creator: actions/data-server.js
import dispatcher from '../dispatcher';
export function receiveData(data) {
dispatcher.dispatch({
type: 'RECEIVE_DATA',
payload: data
});
}
// Web API Utility: utils/server.js
import request from 'request';
import { receiveData } from '../actions/data-server';
export function fetchData() {
request.get('https://api.com/v1/data', receiveData);
}
// Store: stores/store.js
import dispatcher from '../dipatcher';
import { EventEmitter } from 'events';
const CHANGE_EVENT = 'change';
let __data__ = [];
const Store = Object.assign({}, EventEmitter.prototype, {
emitChange () {
this.emit(CHANGE_EVENT);
},
addChangeListener (callback) {
this.on(CHANGE_EVENT, callback);
},
removeChangeListener (callback) {
this.removeListener(CHANGE_EVENT, callback);
},
getData () {
return __data__;
}
});
Store.dispatchToken = dispatcher.register(function (action) {
switch (action.type) {
case 'RECEIVE_DATA':
__data__ = action.payload;
Store.emitChange();
break;
}
});
export default Store;
// Controller View: components/List.jsx
import React from 'react';
import Store from '../stores/Store');
import { fetch } from '../actions/data';
var __getState = function () {
return {
data: Store.getData()
};
};
export default React.createClass({
getInitialState () {
return __getState();
},
componentWillMount () {
fetch();
},
componentDidMount () {
Store.addChangeListener(this._onChange);
},
componentWillUnMount () {
Store.removeChangeListener(this._onChange);
},
_onChange () {
this.setState( __getState() );
},
render () {
const { data } = this.state;
return (
<div className="list">
<ul>
{ data.map(dataItem => <li>{ dataItem.name }</li> )}
</ul>
</div>
);
}
});
查看更详细的助焊剂示例 here .
I actually don't want a view to call for the data. In my opinion a view should be as stupid as possible...
区分智能 和笨 组件是一种很好的做法。这个想法是智能组件保持状态和调用操作,而dumb组件不依赖于应用程序的其余部分。这创建了一个清晰的关注点分离,并允许更好的组件的可重用性和可测试性。了解更多信息 here .
除了助焊剂之外,还有一些有趣的替代品。例如有 redux .它使用单个不可变状态对象(即 Store),其中只允许 reducer(纯函数)通过操作修改应用程序状态。
一定要看看react-refetch如果您主要是从服务器中提取和呈现只读数据。
关于javascript - Flux 是将异步数据获取到我的 React.JS View 的正确解决方案吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34424926/
我只是想知道要安装哪个版本的 Visual Studio 2010(专业版或高级版)提示升级项目.. 项目包括:asp.net mvc、数据库和silverlight。 最佳答案 通常,由不同版本的相
几种通过 iproute2 来打通不同节点间容器网络的方式 几种通过 iproute2 来打通不同节点间容器网络的方式 host-gw ipip vxlan 背景 之前由于需
目录 前言 1、TypeHandler 简介 1.1转换步骤 1.2转换规则 2、JSON 转换 3、枚举转换 4、文章小结
目录 前言 1、常见 key-value 2、时效性强 3、计数器相关 4、高实时性 5、排行榜系列 6、文章小结 前言 在笔者 3 年的
目录 前言 四、技术选型 五、后端接口设计 5.1业务系统接口 5.2App 端接口 六、关键逻辑实现 6.1Red
目录 前言 一、需求分析 1.1发送通知 1.2撤回通知 1.3通知消息数 1.4通知消息列表 二、数据模型设计
目录 前言 一、多租户的概念 二、隔离模式 2.1独立数据库模式 2.2共享数据库独立数据架构 2.3共享数据库共享数据架构
导读: 虽然锁在一定程度上能够解决并发问题,但稍有不慎,就可能造成死锁。本文介绍死锁的产生及处理。 死锁的产生和预防 发生死锁的必要条件有4个,分别为互斥条件、不可剥夺条件、请求与保持条件和循环等待条
在浏览网页后,我找不到任何功能来执行此操作,我有可行的个人解决方案。也许它对某人有用。 **使用 Moment 插件转换日期。***moment(currentPersianDate).clone()
是否有一种解决方案可以很好地处理数字(1-10)手写?我试过tesseract,但我得到的只是垃圾。 理想情况下是 OSS,但商业也可以。 最佳答案 OpenCV 现在带有手写数字识别 OCR 示例。
在服务器应用程序上,我们有以下内容:一个称为 JobManager 的单例类。另一个类,Scheduler,不断检查是否需要向 JobManager 添加任何类型的作业。 当需要这样做时,调度程序会执
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 想改进这个问题?将问题更新为 on-topic对于堆栈溢出。 5年前关闭。 Improve this qu
当您尝试从 GitHub 存储库安装某些 R 包时 install_github('rWBclimate', 'ropensci') 如果您遇到以下错误: Installing github repo
问题在以下链接中进行了描述和演示: Paul Stovell WPF: Blurry Text Rendering www.gamedev.net forum Microsoft Connect: W
我正在寻找一种解决方案,使用标准格式 a × 10 b 在科学记数法下格式化 R 中的数字。一些同行评审的科学期刊都要求这样做,并且手动修改图表可能会变得乏味。 下面是 R 标准“E 表示法”的示例,
已编辑解决方案(如下...) 我有一个启动画面,它被打包到它自己的 jar 中。它有效。 我可以通过以下方式从另一个 java 应用程序内部调用 Splash.jar: Desktop.getDesk
什么是创建像 PageFlakes 或 iGoogle 这样的门户网站的好框架/包? ?我们希望创建一个为员工提供 HR 服务的员工/HR 门户,但我们也需要一种足够灵活的产品,以便我们可以使用它来为
我正在寻找一种解决方案,使用标准格式 a × 10 b 在科学记数法下格式化 R 中的数字。一些同行评审的科学期刊都要求这样做,并且手动修改图表可能会变得乏味。 下面是 R 标准“E 表示法”的示例,
如何将 solr 与 heritrix 集成? 我想使用 heritrix 归档一个站点,然后使用 solr 在本地索引和搜索该文件。 谢谢 最佳答案 使用 Solr 进行索引的问题在于它是一个纯文本
完整日历不包含工作时间功能选项(在任何一天的议程 View 中选择第一行和最后一行 - 例如公司不工作)。我做到了类似的事情: viewDisplay: function(view){
我是一名优秀的程序员,十分优秀!