从redux-observable史诗中访问状态

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甚至还需要还原剂 - 它相当矫枉过正.当然,如果只是为了让你的脚湿透了,一定要学习!只是不要让你认为你需要这些复杂的抽象来处理简单的事情.