redux 获取负载内的当前状态

pxq42qpu  于 2023-01-30  发布在  其他
关注(0)|答案(1)|浏览(133)

在react中,如果我们想要基于状态内的属性集进行计算,我们可以将setState写为:

const [counter, setCounter] = useState(5)
// instead of this: 
// setCounter(counter + 1)
// you can do this:
setCounter((previousState)=> previousState + 1)

这是react的基本原理之一。
我的代码中有一个 * 复杂 * 的问题,* 让我们说 *,所以我不知道如何在一个简单的问题中解释它,但让我们暂时隐藏所有这些问题,看看以后是否需要发布细节😁。
在redux工具包中是否有类似的东西,例如,我可以做以下事情:

import { setCounter } from 'features/posSlice'

const MyComponent = () => {
  const dispatch = useDispatch()
  dispatch(setCounter((previousState) => previousState + 1))
}

现在您可能会问,* 为什么不在Reducer内部实现这一点?* 因此,请执行以下操作:

import { createSlice } from '@reduxjs/toolkit'

const posSlice = createSlice({
  name: 'pos',
  initialState: {
    counter: 5
  },
  reducers: {
    incrementBy = (state, { payload }) => {
       state.counter = state.counter + payload
    }
  }
})

我会说,**好吧......**这是个好问题,原因是,不容易解释,因为这不是真实的的例子。
就现在,让我们简单点:
我想知道是否有一种方法可以在所有这些异步调用中获得当前状态,以便从控制器内部而不是模型内部获得正确的当前状态。
因此,类似于组件内部的内容,而不是切片:

import { setCounter } from 'features/posSlice'

const MyComponent = () => {
  const dispatch = useDispatch()
  dispatch(setCounter((previousState) => previousState + 1))
}

有可能吗?
谢谢🌹

fiei3ece

fiei3ece1#

https://github.com/reduxjs/redux-toolkit/issues/3122#issuecomment-1404879054
很抱歉,但真正的问题是“为什么不在Reducer内部实现这个功能”。
新状态的计算应该总是发生在Reducer中-你应该只传递你需要的东西到有效负载中,而不是新的值。请给予Redux风格指南。
也就是说,您可以在thunk中执行此操作,尽管我真的建议您不要这样做。
分派((分派,获取状态)=〉{
分派(设置计数器(获取状态().您的计数器值+ 1))})
所以就像

import { useDispatch } from 'react-redux'

// inside a component
const dispatch = useDispatch()
dispatch((dispatch, getState)=>{
 dispatch(getState().pos.counter + 1)
})

相关问题