我的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;
}
}
答案 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
来改变状态,因为boolean
,string
和number
值是不可变的。
在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)
我对此处的身份验证状态非常严格,只有在经过身份验证时才会设置,并且对其他所有内容都取消设置,但您可以根据需要进行调整。