根据文档,"没有中间件,Redux商店只支持同步数据流".我不明白为什么会这样.为什么容器组件不能调用异步API,然后调用dispatch
操作?
例如,想象一个简单的UI:字段和按钮.当用户按下按钮时,该字段将填充来自远程服务器的数据.
import * as React from 'react';
import * as Redux from 'redux';
import { Provider, connect } from 'react-redux';
const ActionTypes = {
STARTED_UPDATING: 'STARTED_UPDATING',
UPDATED: 'UPDATED'
};
class AsyncApi {
static getFieldValue() {
const promise = new Promise((resolve) => {
setTimeout(() => {
resolve(Math.floor(Math.random() * 100));
}, 1000);
});
return promise;
}
}
class App extends React.Component {
render() {
return (
<div>
<input value={this.props.field}/>
<button disabled={this.props.isWaiting} onClick={this.props.update}>Fetch</button>
{this.props.isWaiting && <div>Waiting...</div>}
</div>
); …
Run Code Online (Sandbox Code Playgroud) 现在有很多关于redux镇最新孩子的讨论,redux-saga/redux-saga.它使用生成器函数来监听/调度操作.
在我绕过它之前,我想知道redux-saga
使用redux-thunk
async/await时使用的优点/缺点而不是下面的方法.
组件可能看起来像这样,像往常一样调度动作.
import { login } from 'redux/auth';
class LoginForm extends Component {
onClick(e) {
e.preventDefault();
const { user, pass } = this.refs;
this.props.dispatch(login(user.value, pass.value));
}
render() {
return (<div>
<input type="text" ref="user" />
<input type="password" ref="pass" />
<button onClick={::this.onClick}>Sign In</button>
</div>);
}
}
export default connect((state) => ({}))(LoginForm);
Run Code Online (Sandbox Code Playgroud)
然后我的行为看起来像这样:
// auth.js
import request from 'axios';
import { loadUserData } from './user';
// define constants
// define initial state
// export default reducer …
Run Code Online (Sandbox Code Playgroud) 我将成为David Nolen的Om库的粉丝.
我想在我们的团队中构建一个不太大的Web应用程序,但我无法说服我的队友切换到ClojureScript.
有没有办法可以使用om中使用的原则但是在JavaScript中构建应用程序?
我想的是:
我正在努力争取上面的第5名.
有没有人冒险进入这个领域或有任何建议?也许有人尝试使用immutable-js构建react.js应用程序?
我正在为搜索系统构建一个前端,几乎所有用户操作都需要触发相同的异步操作来重新获取搜索结果.例如,如果用户输入关键字,那么我们需要提取/api/search?q=foo
,如果他们稍后选择我们提取的类别/api/search?q=foo&categoryId=bar
.我原来有单独的行动类型FETCH_RESULTS
,SELECT_CATEGORY
,DESELECT_CATEGORY
,等我创建了一个异步操作的创造者FETCH_RESULTS
,但其他人是同步的.我想的越多,它们最终都需要从后端重新获取结果,并根据后端的响应更新应用程序状态.
对于我来说,使用单个异步动作创建器进行任何更改是否合理?或者为每个不同的用户操作(选择关键字,类别或过滤器)使用异步操作创建者会更好吗?
我认为粒度操作的优点是事件更准确地反映用户所做的事情(例如用户选择了一个类别)与必须查看有效负载以找出实际改变的内容,但它们都非常相似.