【发布时间】:2022-01-07 14:27:46
【问题描述】:
我有一个返回要下载的文件的后端。
目前,当用户执行某项操作时,会调度一个操作,该操作会运行 reducer export,并执行通常的技巧来下载文件。我正在使用 redux-toolkit。
const mySlice = createSlice({
name: "my",
initialState,
reducers: {
export: (state) => {
const link = document.createElement("a")
link.href = '...'
document.body.appendChild(link)
link.click()
link.parentNode?.removeChild(link)
},
}
})
这很有效。但是,我想在下载时向用户提供反馈,即模式对话框。所以我在状态中定义了一个isExporting属性,并且有一个组件根据这个属性显示对话框。
但是,这样写的reducer不起作用:
export: (state) => {
state.isExporting = true
const link = document.createElement("a")
link.href = '...'
document.body.appendChild(link)
link.click()
link.parentNode?.removeChild(link)
state.isExporting = false
},
因为我相信我引入了副作用,而且状态将在 reducer 执行后设置,而不是在两者之间。
这样做的正确方法是什么?
【问题讨论】:
标签: reactjs react-redux redux-toolkit