我想知道,有时我有一台需要另一台减速机信息的减速机.例如,我有这个减速器:
import * as ActionTypes from '../actions/action_type_constants';
import KeyCode from 'keycode.js/index';
import {store} from "../index";
import {mod} from "../pure_functions";
export function selectedCompletion(state = 0, action) {
if (action.type === ActionTypes.arrowKeyPressed) {
const completionsLength = store.getState().completions.data.length;
if (action.keyCode === KeyCode.UP) {
return mod(state - 1, completionsLength);
} else if (action.keyCode === KeyCode.DOWN) {
return mod(state + 1, completionsLength);
}
}
return state;
}
Run Code Online (Sandbox Code Playgroud)
我在函数的第二行调用store.getState,否则我无法正确确定索引.
我可以重构这个和另一个减速器,以便它成为一个大的减速器,但为了可读性,我更喜欢这个选项.
如果我在reducer中使用这种调用store.getState()的模式,我不确定是否会以某种方式解决问题.
mar*_*son 16
是的,这绝对是一种反模式.Reducer功能应该是"纯粹的",并且只能基于它们的直接输入(当前状态和动作).
Redux FAQ在关于reducers之间共享状态的 FAQ中讨论了这类问题.基本上,您应该编写一些自定义的reducer逻辑,传递所需的其他信息,或者将更多信息添加到您的操作中.
我还为Redux文档编写了一个名为Structuring Reducers的部分,该部分讨论了与reducer逻辑相关的一些重要概念.我鼓励你仔细阅读.
| 归档时间: |
|
| 查看次数: |
11558 次 |
| 最近记录: |