2

我的 React & Redux App 中有一个处理身份验证的状态。这是一个boolean

我想简化从 Redux 商店获取这个状态的过程,但找不到这样的例子。

这种方法是一个坏主意吗?我知道变异状态不是正确的方法。我不确定这是否构成突变。

import {
  AUTHENTICATED,  
  AUTHENTICATION_ERROR,
  AUTHENTICATION_REMOVE,
  UNAUTHENTICATED,
} from '../actions/types';

let INITIAL_STATE = false

export default function( state = INITIAL_STATE, action) {
  switch(action.type) {
    case AUTHENTICATED:
      return !state

    case UNAUTHENTICATED:
      return state

    case AUTHENTICATION_ERROR:
      return state

    case AUTHENTICATION_REMOVE:
      return !state

    default:
      return state;
  }
}
4

3 回答 3

1

这很好。因为你没有从状态中改变任何东西。

是的,你没有改变state. 因为您的状态只是一个boolean值,而您正在返回与您的状态相反的值。但是您没有对状态进行任何更改。

const value = true;
console.log(!value) // This will not change the value directly but it just returns false

但是尝试key在状态下使用a。将来,如果您想添加更多键。你不必做这么多的改变。

于 2018-05-18T06:55:31.923 回答
1

当您的状态只是一个布尔值时,您实际上并没有通过编写来改变状态,!state因为和值是不可变的。booleanstringnumber

此外,在减速器状态中仅存储一个布尔值可能不是一个坏主意。但是,您必须阅读You Might not need Redux以了解更多关于何时应该和不应该使用 redux

于 2018-05-18T06:56:12.657 回答
0

你可以试试这个增强器redux-named-reducers

然后你的减速器被简化成这样:

authModule.reduce(AUTHENTICATED, { isAuthenticated: true })
authModule.reduce([UNAUTHENTICATED, AUTHENTICATION_ERROR, 
AUTHENTICATION_REMOVE], { isAuthenticated: false })

然后你可以像这样从任何地方访问身份验证状态:

getState(authModule.isAuthenticated)

我对此处的身份验证状态非常严格,仅在经过身份验证时才设置,而对其他所有内容都取消设置,但您可以根据需要进行调整。

于 2018-05-18T09:29:38.573 回答