Javascript 如何在Redux存储中处理单个值?
让我们假设我们有这个商店:Javascript 如何在Redux存储中处理单个值?,javascript,reactjs,redux,immutability,Javascript,Reactjs,Redux,Immutability,让我们假设我们有这个商店: // initialState.js file export default = { _token: 'a hashed long string from server', user: { key: value, ... many more } .. many more } 这是仅用于令牌的缩减器: import * as types from '../actions/actionTypes' import initialState
// initialState.js file
export default = {
_token: 'a hashed long string from server',
user: {
key: value,
... many more
}
.. many more
}
这是仅用于令牌的缩减器:
import * as types from '../actions/actionTypes'
import initialState from './initialState'
export default function tokenReducer(state = initialState._token, action) {
switch(action.type) {
case types.CHANGE_TOKEN:
console.log(action.payload) // a new hashed long string from server
return action.payload // payload is a token string that comes from server
default:
return state
}
}
可以吗
我的意思是,我只使用了initialState.token
在我的reducer中存储的一部分,以防止使用Object.assign
或spread运算符返回整个状态,我只是更新了字符串(token)
这是从存储中只更改一个字符串值的正确方法,还是我应该返回整个状态并使用Object.assign
如下所示
import * as types from '../actions/actionTypes'
import initialState from './initialState'
export default function tokenReducer(state = initialState._token, action) {
switch(action.type) {
case types.CHANGE_TOKEN:
console.log(action.payload) // a new hashed long string from server
return {
...state ,
Object.assign({}, state, {_token: action.payload})
}
default:
return state
}
}
你的第一个病例和第二个病例有点不同。首先,如果您使用这样一个reducer,那么在第一种情况下,您的
tokenReducer
状态将只是一个字符串。但是,在第二种情况下,您返回的是一个对象,在那里您试图传播您的状态,一个字符串!还有一些错误的对象键分配,没有键(object.assign
line)。所以,这可能不是你在这里所想的。也许你可以为一个州属性使用一个减速机,但你的应用程序的设计如何,你将如何使用州的其他部分?我目前正在使用第一个减速机,我认为它有问题,我不知道为什么,但我认为有问题,这就是我在这里发布这个问题的原因,第一个减速器是处理问题的正确方法,第二个减速器不能正常工作。你操纵国家是错误的。这里有一个状态:令牌字符串。没有物体,没有其他东西。所以,如果你想保持一个令牌字符串状态,只需使用第一个,没有什么问题。但是,正如我在前面的评论中所说,如果不看到应用程序的整个状态结构,我们无法确定。例如,您计划如何使用初始状态的其他部分?如果您将此状态扔给另一个缩减器,那么如果您不在另一个缩减器中对其进行变异,为什么要保留\u token
?第一种方法实际上没有错。