我有一个反应应用程序,它使用 redux 状态管理工具以及本地本机状态管理,即反应(组件/容器)状态。假设有一个表单组件,其数据存储在反应状态。API 调用是通过 sagas 进行和处理的,它会相应地更新 Redux Store。如何更改反应状态,例如将表单状态键更改为loading: false
或通常在 saga 从 API 调用接收数据后如何使用数据更新表单(受控表单或不受控)。对于受控表单,将有一个容器组件来管理该表单的道具,但又如何更新容器的状态呢?我不想将数据存储在 redux 和 react 状态,特别是如果该数据用于本地存储,而不是 redux 存储
如果我使用该getDerivedStateFromProps
方法,我将需要将该数据存储在例如 reduxState 中,以便最终复制或计算并放入反应状态。我现在正在使用下面描述的方法,但我想知道你们还有什么可以建议的。
https://github.com/redux-saga/redux-saga/issues/907
我正在使用的示例代码如下,类似于链接中描述的代码
validate = (drops, senderDetails, revalidate) => {
const { largestLCU, actions: { validateDispatch } } = this.props
const promise = new Promise(resolve => validateDispatch(drops, senderDetails,
requestBatchSize, defaultMaxCapPerStop, defaultMarkerColor, largestLCU, resolve, revalidate))
promise.then(({ success, data }) => {
if (success) {
this.setState((state) => {
const { messages } = this.props
return {
...state,
senderDetails: {
...state.senderDetails,
...data,
},
currentStatus: {
...state.currentStatus,
isAllValid: messages.length === 0,
isFileSelected: false,
},
csvFile: null,
loading: false,
}
})
} else {
this.setState({
loading: false,
})
}
})
}
validateDispatch 调度一个动作,redux saga 拦截,执行 Api 调用并返回某些数据以在 Promise 解决后更新反应状态。当然这是妥协