相关疑难解决方法(0)

为什么我们需要Redux中的异步流中间件?

根据文档,"没有中间件,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)

javascript asynchronous reactjs redux redux-thunk

600
推荐指数
9
解决办法
12万
查看次数

使用带有ES6发生器的redux-saga与带有ES2017异步/等待的redux-thunk的优点/缺点

现在有很多关于redux镇最新孩子的讨论,redux-saga/redux-saga.它使用生成器函数来监听/调度操作.

在我绕过它之前,我想知道redux-saga使用redux-thunkasync/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)

javascript reactjs redux redux-thunk redux-saga

449
推荐指数
6
解决办法
10万
查看次数

Om但是在javascript中

我将成为David Nolen的Om库的粉丝.

我想在我们的团队中构建一个不太大的Web应用程序,但我无法说服我的队友切换到ClojureScript.

有没有办法可以使用om中使用的原则但是在JavaScript中构建应用程序?

我想的是:

  1. 不可变数据结构的immutable-jsmori
  2. CSP的js-csp
  3. 只是app-state原子的普通javascript对象
  4. 游标的immutable-js
  5. 用于跟踪app-state和发送游标通知的东西

我正在努力争取上面的第5名.

有没有人冒险进入这个领域或有任何建议?也许有人尝试使用immutable-js构建react.js应用程序?

reactjs om

41
推荐指数
1
解决办法
1万
查看次数

我应该使用一种或多种操作类型来表示此异步操作吗?

我正在为搜索系统构建一个前端,几乎所有用户操作都需要触发相同的异步操作来重新获取搜索结果.例如,如果用户输入关键字,那么我们需要提取/api/search?q=foo,如果他们稍后选择我们提取的类别/api/search?q=foo&categoryId=bar.我原来有单独的行动类型FETCH_RESULTS,SELECT_CATEGORY,DESELECT_CATEGORY,等我创建了一个异步操作的创造者FETCH_RESULTS,但其他人是同步的.我想的越多,它们最终都需要从后端重新获取结果,并根据后端的响应更新应用程序状态.

对于我来说,使用单个异步动作创建器进行任何更改是否合理?或者为每个不同的用户操作(选择关键字,类别或过滤器)使用异步操作创建者会更好吗?

我认为粒度操作的优点是事件更准确地反映用户所做的事情(例如用户选择了一个类别)与必须查看有效负载以找出实际改变的内容,但它们都非常相似.

reactjs redux

12
推荐指数
2
解决办法
2787
查看次数

标签 统计

reactjs ×4

redux ×3

javascript ×2

redux-thunk ×2

asynchronous ×1

om ×1

redux-saga ×1