我正在考虑最近学习reactjs,我希望有人能帮助我理解使用redux的情况,因为我对其复杂的逻辑感到困惑。
首先,我使用了angular2 +一段时间,所以我也试图从我已经知道的内容中抓住这个想法。
我见过很多redux的例子,但我不明白使用动作和派遣的好处。
使用动作和缩减器使用redux store而不是仅仅使用类和主题有什么好处?
MethodInvocation
答案 0 :(得分:1)
调度操作优于传统方法调用的好处:
记录 - 由于可以轻松记录所有操作,因此您始终可以看到应用中发生了什么。对于较大的应用程序来说,这对我来说是一个杀手锏。
预处理 - 您可以使用redux中间件对您的操作执行各种奇特的预处理 - 最典型的是以某种方式自动执行xhr请求。
由于操作是可序列化的,因此可实现"撤消"等功能。更容易,而且不太常见。
关于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 Redux和The 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感兴趣。