Redux可以管理一个布尔值吗?

时间:2018-05-18 06:45:58

标签: reactjs redux react-redux react-thunk

我的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;
  }
}

3 个答案:

答案 0 :(得分:1)

这很好。因为你没有改变州的任何东西。

是的,你没有改变state。因为您的州只是一个boolean值,而您返回的是州的相反值。但是你没有对国家做任何改变。

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

但是尝试在州内使用key。将来,如果您想添加更多密钥。您无需进行太多更改。

答案 1 :(得分:1)

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

在reducer状态中只存储一个布尔值也许不是一个坏主意。但是,您必须阅读You Might not need Redux以更多地了解应该何时应该使用redux

答案 2 :(得分:0)

您可以尝试使用此增强器redux-named-reducers

然后你的减速器被简化为这样的东西:

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

然后您可以从以下任何位置访问身份验证状态:

getState(authModule.isAuthenticated)

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

相关问题