sra*_*sra 6 javascript rxjs reactjs redux redux-observable
我正在使用redux建立一个小fusball经理.基本上它是一个页面,显示两个团队的分数和一些增加它们的按钮.我有一些行为,例如{ type:"GOAL_UP", team:"red" }减速器将改变状态中的相应值(得分).
现在我想添加一个史诗,每当它遇到GOAL_UP支票时,如果两支球队中的一支赢了比赛.如果一支球队的得分达到8分,我希望它能够发出一个GAME_WON动作.我的问题是我必须访问该州以了解每个团队的得分.我找不到从史诗中获取状态的方法.
是否正在访问redux-observable范围之外的状态?如果是这样,你会如何解决这个问题?
我正在考虑将新分数作为GOAL_UP行动中的财产.像这样的东西{ type:"GOAL_UP", team:"red", newScore:8 }.但不知怎的,这感觉不对.我还在fusball-table上有两个物理按钮,它们与网络插座连接,用于发送GOAL_UP动作.由于他们不是从我的ui触发他们不知道国家.
GAME_WON如果任一团队的得分为8,我还可以考虑在我的ui组件的渲染功能中调度动作.但这感觉更加错误:)
非常欢迎输入,谢谢
jay*_*lps 11
查看redux-observable文档的访问商店状态部分.
它描述了如何为您的史诗提供精简版商店,以便您可以打电话store.getState().
请注意,当某个动作到达您的史诗时,它已经通过您的reducer运行(并且任何状态都已更新).
const INCREMENT = 'INCREMENT';
const INCREMENT_IF_ODD = 'INCREMENT_IF_ODD';
const increment = () => ({ type: INCREMENT });
const incrementIfOdd = () => ({ type: INCREMENT_IF_ODD });
const incrementIfOddEpic = (action$, store) =>
action$.ofType(INCREMENT_IF_ODD)
.filter(() => store.getState().counter % 2 === 0)
.map(increment);
// later...
dispatch(incrementIfOdd());
Run Code Online (Sandbox Code Playgroud)
我还要补充一点,如上所述,我认为你不需要redux-observable甚至还需要还原剂 - 它相当矫枉过正.当然,如果只是为了让你的脚湿透了,一定要学习!只是不要让你认为你需要这些复杂的抽象来处理简单的事情.