【问题标题】:Can Redux manage just a boolean?Redux 可以只管理一个布尔值吗?
【发布时间】:2018-10-28 12:58:24
【问题描述】:

我的 React 和 Redux 应用中有一个状态用于处理身份验证。这是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;
  }
}

【问题讨论】:

标签: reactjs redux react-redux react-thunk


【解决方案1】:

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

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

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

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

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

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

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

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

      getState(authModule.isAuthenticated)
      

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

      【讨论】:

        猜你喜欢
        • 2012-02-13
        • 2021-01-09
        • 2022-12-22
        • 1970-01-01
        • 2012-07-22
        • 1970-01-01
        • 2010-12-14
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多