Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/469.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何在Redux存储中处理单个值?_Javascript_Reactjs_Redux_Immutability - Fatal编程技术网

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
?第一种方法实际上没有错。