如何处理react / redux中的副作用?

德鲁怀亚特

我在弄清楚在我的react / redux应用程序中将异步副作用处理程序粘贴到哪里时遇到了一些麻烦。

我正在使用react-router,并且我所有的根(或几乎根)级别的容器都在调用调度并毫无问题地接收更新。复杂之处在于异步服务适合于此。这是一个例子:

路线

<Route path='/' component={App}>
    <Route path='/home' component={Home} />
    <Route path='/locations' component={Locations} />
    <Route path='/something-else' component={SomethingElse} />
</Route>

让我们看一下需要获取某些东西的地方,这并不奇怪

class Locations extends React.Component<LocationsProps, void> {
    private _service: StoreService;

    constructor(props) {
        super(props);
        this._service = new StoreService();
    }

    render(): JSX.Element {
        const { status, stores, selectedStore } = this.props;
        return (
            <fieldset>
                <h1>Locations</h1>
                <StoresComponent 
                    status={status} 
                    stores={stores} 
                    selectedStore={selectedStore}
                    onFetch={this._onFetch.bind(this)}
                    onSelect={this._onStoreSelect.bind(this)} />
            </fieldset>
        );  
    }

    private _onFetch(): void {
        const { dispatch } = this.props;
        dispatch(fetchStores());

        this._service.find()
            .then(stores => dispatch(loadStores(stores)));
    }

    private _onStoreSelect(id: string): void {
        const { dispatch } = this.props;
        dispatch(selectStore(id));
    }

    static contextTypes: React.ValidationMap<any> = {
        status: React.PropTypes.string,
        stores: React.PropTypes.arrayOf(React.PropTypes.object)
    };
}

function mapStateToProps(state) {
    return {
        status: state.stores.status,
        stores: state.stores.list,
        selectedStore: state.stores.selectedStore
    };
}

export default connect(mapStateToProps)(Locations);

我有一个非常笨的商店组件,它依赖于它的容器来完成大部分工作。Locations容器通常也很笨,但是困扰我的是_onFetch()方法,它是由Stores组件内部的按钮单击触发的。

onFetch()正在分派该操作,该操作将状态设置为“正在提取”,但它也与StoreService交互,感觉很臭。应该如何处理?这样,Locations就可以调度动作并等待其道具更新了吗?

我考虑过的

我曾考虑过将所有API交互都移至顶级“应用”容器,但这仍然感觉不太正确。是否可以将“无头”侦听器订阅到应用程序状态?也就是说,什么都不会渲染任何东西,只监视获取请求并触发类似以下内容的东西:

this._storeService.find()
    .then(stores => dispatch(loadStores(stores)));
Shishir Arora

使用sagas进行任何异步,setinterval等副作用。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何处理react / redux中的副作用?

来自分类Dev

从Redux迁移到React Context API +钩子时如何处理副作用

来自分类Dev

我应该如何处理RxJava中的副作用?

来自分类Dev

您如何处理CQRS架构中的命令副作用?

来自分类Dev

如何处理Applicative的副作用?

来自分类Dev

如何处理Applicative的副作用?

来自分类Dev

编写React / Redux时如何处理TDD

来自分类Dev

如何处理嵌套React Redux组件的动作调度

来自分类Dev

我该如何处理React JSX中的长className?

来自分类Dev

如何处理在React中设置状态的onChange事件?

来自分类Dev

如何处理Flux / React中的数据更改?

来自分类Dev

我如何处理 React Native 中的后退按钮?

来自分类Dev

React Redux Store Layout:如何处理“添加项目”请求的“待处理”状态?

来自分类Dev

在Lua中,如何处理?

来自分类Dev

如何处理XSLT中的处理指令

来自分类Dev

当涉及可变值类型时,如何处理异步/等待产生的副作用?

来自分类Dev

Redux 连接的 React 应用程序 - 在我的副作用完成之前如何不渲染它?

来自分类Dev

Redux表单:如何处理多个按钮?

来自分类Dev

Redux如何处理深度嵌套的模型?

来自分类Dev

如何处理Redux表单提交的数据

来自分类Dev

我该如何处理React中componentWillUnmount中的假动画?

来自分类Dev

如何处理子组件中的redux表单提交?

来自分类Dev

如何处理React的onChange事件中的十进制值作为输入?

来自分类Dev

我该如何处理事件以在React JS中打开窗口?

来自分类Dev

在React JS中如何处理输入选择的更改值?

来自分类Dev

如何处理错误-在codeandbox的React应用程序中“无法获取”

来自分类Dev

React-如何处理不同组件中输入的表单提交?

来自分类Dev

如何处理纯功能性React组件中的事件

来自分类Dev

react-bootstrap-table2 如何处理扩展行中的大显示

Related 相关文章

  1. 1

    如何处理react / redux中的副作用?

  2. 2

    从Redux迁移到React Context API +钩子时如何处理副作用

  3. 3

    我应该如何处理RxJava中的副作用?

  4. 4

    您如何处理CQRS架构中的命令副作用?

  5. 5

    如何处理Applicative的副作用?

  6. 6

    如何处理Applicative的副作用?

  7. 7

    编写React / Redux时如何处理TDD

  8. 8

    如何处理嵌套React Redux组件的动作调度

  9. 9

    我该如何处理React JSX中的长className?

  10. 10

    如何处理在React中设置状态的onChange事件?

  11. 11

    如何处理Flux / React中的数据更改?

  12. 12

    我如何处理 React Native 中的后退按钮?

  13. 13

    React Redux Store Layout:如何处理“添加项目”请求的“待处理”状态?

  14. 14

    在Lua中,如何处理?

  15. 15

    如何处理XSLT中的处理指令

  16. 16

    当涉及可变值类型时,如何处理异步/等待产生的副作用?

  17. 17

    Redux 连接的 React 应用程序 - 在我的副作用完成之前如何不渲染它?

  18. 18

    Redux表单:如何处理多个按钮?

  19. 19

    Redux如何处理深度嵌套的模型?

  20. 20

    如何处理Redux表单提交的数据

  21. 21

    我该如何处理React中componentWillUnmount中的假动画?

  22. 22

    如何处理子组件中的redux表单提交?

  23. 23

    如何处理React的onChange事件中的十进制值作为输入?

  24. 24

    我该如何处理事件以在React JS中打开窗口?

  25. 25

    在React JS中如何处理输入选择的更改值?

  26. 26

    如何处理错误-在codeandbox的React应用程序中“无法获取”

  27. 27

    React-如何处理不同组件中输入的表单提交?

  28. 28

    如何处理纯功能性React组件中的事件

  29. 29

    react-bootstrap-table2 如何处理扩展行中的大显示

热门标签

归档