关于减速器与动作的新手问题。来自 redux 文档:
动作描述了某事发生的事实,但不指定应用程序的状态如何变化作为响应。
和
给定相同的参数,reducer 应该计算下一个状态并返回它。没有惊喜。无副作用。没有 API 调用。没有突变。只是一个计算。
因此,如果我们考虑以下场景:
- 用户可以在地图上放置点并获取这些点之间的路线。
- 当用户第一次点击地图时,这是他的起点。当他第二次点击时——这就是他的终点。随后的单击在前一个点和结束位置之间添加点。
- 添加每个点后(第一个除外),必须计算新点和前一个点之间的路线。因此,如果我有 S -> A -> F 并添加点 B (S -> A -> B -> F) 必须计算两条路线 A -> B 和 B -> F
所以我们在添加任何 3+ 点时会有两个副作用:
- 新点不在列表末尾
- 新路线必须计算到终点。
如果我将我的点结构建模为:
// typescript
interface Point {
coordinates;
routeTo?;
}
我在 Actions 中执行项目位置计算和路线检索是否正确,例如:
// pseudo code
export function addMapPoint(newPoint) {
return (dispatch, getState) => {
const {points} = getState();
const position = getInsertPosition(points, newPoint)
dispatch(addPoint(newPoint, position));
if (points.length >= 2) {
const previousPoint = getPreviousPoint(points, position);
calculateRoute(newPoint, previousPoint).then(route => {
dispatch(updateRoute(newPoint, route))
})
}
}
}
对我来说,这在某种程度上与“但不指定应用程序的状态如何变化”相矛盾——因为从动作中我指定了在哪里插入我的新点。
我可以计算减速器中的插入位置,但是如何获取终点的路线数据?
这里的正确方法是什么?