使用redux有什么好处?

时间:2017-07-06 22:54:08

标签: javascript reactjs redux

我正在考虑最近学习reactjs,我希望有人能帮助我理解使用redux的情况,因为我对其复杂的逻辑感到困惑。

首先,我使用了angular2 +一段时间,所以我也试图从我已经知道的内容中抓住这个想法。

我见过很多redux的例子,但我不明白使用动作和派遣的好处。

使用动作和缩减器使用redux store而不是仅仅使用类和主题有什么好处?

MethodInvocation

2 个答案:

答案 0 :(得分:1)

调度操作优于传统方法调用的好处:

  1. 记录 - 由于可以轻松记录所有操作,因此您始终可以看到应用中发生了什么。对于较大的应用程序来说,这对我来说是一个杀手锏。

  2. 预处理 - 您可以使用redux中间件对您的操作执行各种奇特的预处理 - 最典型的是以某种方式自动执行xhr请求。

  3. 由于操作是可序列化的,因此可实现"撤消"等功能。更容易,而且不太常见。

  4. 关于reducers-reducers恰好是更新不可变状态的最简洁方法。因此,与可变存储和不可变存储状态相关的减速器并不是那么多,而且这是一个非常宗教的问题。我会说,给予足够的纪律可变状态和不可变状态一样。

    关于预处理 - 基本上你可以使用一段代码来查看系统中发生的所有动作,并在动作符合某些条件时执行某些操作。

    例如:

    • 具有{ url, params }属性的所有操作都将导致对{ url }指定的后端API的请求,并转换为具有{ responseJson }属性而不是{ debounce }属性的新操作网址和PARAMS
    • 包含{ alert }属性的所有操作都将被撤消,因此如果您连续发出十几个此类操作,则只会实际处理最后一个。
    • 具有let list = [ {'first': 'morgan', 'id': 1}, {'first': 'eric', 'id': 1}, {'first': 'brian', 'id': 2 }, {'first': 'derek', 'id' : 2}, {'first': 'courtney', 'id': 3}, {'first': 'eric', 'id': 4}, {'first': 'jon', 'id':4}, ] const idMap = list.reduce((map, item) => { if (Array.isArray(map[item.id])) { map[item.id].push(item.first) } else { map[item.id] = [item.first] } return map }, {}) const b = Object.keys(idMap).map(id => [parseInt(id), idMap[id]]) console.info(JSON.stringify(b))属性的所有操作都会向用户显示一个小的Toast警报。
    • 依旧等等。基本上,调度操作会迫使您通过中心位置传递应用程序中所有最重要的内容,这些内容可以以您能想到的任何方式处理这些操作。

答案 1 :(得分:0)

@Dmitry Sokurenko的回答很好。有关详细信息,请参阅You Might Not Need ReduxThe Case for Flux上的Dan Abramov的帖子以及Redux FAQ on "when should I use Redux?"。另外,虽然您没有使用React,但您可能也对an article I co-wrote about the benefits of using Redux in a React app感兴趣。