- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想做这样的事情
var App = React.createClass({
render: function() {
return (
<CountryAutoComplete />
)
}
});
不同的应用程序
var App2 = React.createClass({
render: function() {
return (
<CountryAutoComplete />
)
}
});
这是一个简单的自动完成(不是整个文件)
var AutoComplete = React.createClass({
componentDidMount: function() {
$(this.getDOMNode()).typeahead(this.props);
},
render: function() {
return (
<input type="text" class="typeahead" onChange={this.props.onChange} />
);
}
});
CountryAutoComplete 应该像这样是独立的。
var CountryAutoComplete = React.createClass({
search: function(country, process) {
// Make an ajax call and return the data. No other components needed
$.ajax({
url: '/country' + '?search=' + country
}).then(process);
},
render: function() {
return (
<AutoComplete onChange={this.props.onChange} source={this.search} />
);
}
});
根据 Flux 文档,看起来任何具有 API 调用的内容都需要经过
操作 -> API -> 调度程序 -> 存储 -> 组件
这使得 CountryAutoComplete 绑定(bind)到特定的应用程序,因为操作、调度程序和存储是特定于该应用程序的。使该组件可跨应用程序重用的最佳方法是什么?
最佳答案
您不应该在自动完成组件中进行任何 ajax 调用(因为您说过要使其可重用)。我通常将所有数据请求调用/API 使用放入一个单独的模块中,该模块使用 Promise 来防止多个请求
因此,我们的想法是让自动完成组件从父组件获取选项/数据。该父组件最初可以从存储中获取数据,并监听该存储中的任何更改事件,并在需要时更新其状态。将 this.state.options
(或您用于选项的任何状态)作为 AutoComplete 的 prop 传递。当用户键入内容时,通过查询发出一个操作。该操作依次调用 API 和 Dispatcher、更新存储并为存储发出更改事件。您的父组件将分别更新其状态,并将作为 prop 流向 AutoComplete 组件。
所以像这样:
var App = React.createClass({
getInitialState: function() {
return {
// default results/data?
data : Store.getResults('')
};
},
storeChangeListener: function(newData) {
this.setState({
data: newData
});
},
componentDidMount: function() {
this.listenTo(Store, this.storeChangeListener);
},
onChange: function(query) {
// on search change
Actions.getResults(query);
},
render: function() {
return (
<AutoComplete data={this.state.data} onChange={this.onChange} />
);
}
});
在商店里,是这样的:
var countryAPI = require('./countryAPI')
var Store = {
getResults: function(query) {
// check cache if any? otherwise make call
if(this.cache[query]) {
return this.cache[query];
} else {
countryAPI.search(query).then(this.update);
}
},
update: function(data) {
AppDispatcher.dispatch({
type: "DATA_FROM_SERVER",
payload: {id: query, data: result}
})
},
handleDataFromServer: function(action) {
//store into cache/store
this.cache[action.payload.id] = action.payload.result;
this.emit("change"); // re-render app on whoever is listening to this store
}
}
例如你的 api
var countryAPI = {
search: function(query) {
// check to make sure this promise isnt called before
if(!this.allPromises[query]) {
this.allPromises[query] = $.ajax({
url: '/country' + '?search=' + country
})
}
return this.allPromises[query];
}
}
总而言之,实际的 API 实现应该与 Flux 操作分开,它们只应该关心 Web-API 特定的内容,并让 Flux 操作/存储作为数据流单独处理响应:
Component --> Listens to Store
--> Calls Load Action --> Show Pending State/Optimistic Updates --> Dispatcher --> Store --> changeEvent (Component will be listening and be updated)
--> countryAPI.load()
onLoadSuccess --> Dispatcher --> Store --> changeEvent --> Component
onLoadError --> Dispatcher --> Store --> changeEvent --> Component
关于reactjs - Flux/React Complex 可重复使用组件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26793023/
我正在尝试构建一个应用程序 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",
我是一名优秀的程序员,十分优秀!