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