在Redux操作中访问状态

时间:2018-03-08 18:14:41

标签: reactjs react-native redux react-redux

我有一个具有以下状态的Redux reducer:

public void shuffleArray() {
    List<String[][]> asList;
    asList = Arrays.asList(question);
    Collections.shuffle(asList);
    question = asList.toArray(new String[0][0][0]);
}

我已经有一些修改state.permissions的Redux操作。我正在编写以下操作来运行权限检查:

const INITIAL_STATE = {
  permissions: [''],
  authzError: null
};

我知道我可以这样做:

export function isAuthz(allowed, except) {
  // I need state.permissions here
  ...
}

但是这意味着在组件中拉出state.permissions然后将其放入isAuthz操作中,这似乎是浪费和容易出错的。我只能检查reducer中的权限,但我认为某个动作是我想要这样做的地方。

我应该在哪里进行此权限检查,如何获得state.permissions?

谢谢,

沃伦

3 个答案:

答案 0 :(得分:3)

你也可以在行动中获得状态。

例如,在此操作中,您可以执行此操作:

export function isAuthz(allowed, except) {
  return (dispatch, getState) => {
    const state = getState()
    // do stuff
  }
} 

答案 1 :(得分:1)

我在发布问题后立即找到答案。你可以使用redux-thunk来获得状态。

export function isAuthz(allowed, except) {
  return (dispatch, getState) => {
     const { permissions } = getState();
     // Now do permission check
  };
}

希望这有助于其他人。

沃伦

答案 2 :(得分:0)

如果您从模块中导出商店

public func createBorderForView(color: UIColor, radius: CGFloat, width: CGFloat = 0.7) { self.layer.borderWidth = width self.layer.cornerRadius = radius self.layer.shouldRasterize = false self.layer.rasterizationScale = 2 self.clipsToBounds = true self.layer.masksToBounds = true let cgColor: CGColor = color.cgColor self.layer.borderColor = cgColor }

只需导入

export default createStore(...)

编辑:正如其他人所指出的那样,如果您使用import store from '../path/to/store' export function isAuthz() { const state = store.getState() ... // use state.permission } ,则会为您提供redux-thunk参数作为thunk中的第二个参数

getState