У меня есть приложение реагирования, которое использует инструмент управления избыточным состоянием, а также локальное управление собственным состоянием, то есть состояние реакции (компонент / контейнер).Предположим, есть компонент формы, данные которого хранятся в состоянии реакции.Вызов API выполняется и обрабатывается через sagas, который соответствующим образом обновляет Redux Store.Как изменить состояние реакции, например, изменить ключ состояния формы на loading: false
или, как правило, обновить форму (контролируемую или неконтролируемую) данными после того, как сага получит данные из вызова API.Для контролируемой формы будет компонент контейнера, который управляет реквизитом для этой формы, но опять же, как обновить состояние контейнера?Я не хочу хранить данные как в избыточном, так и в реактивном состоянии, особенно если эти данные предназначены для локального хранилища, а не для избыточного хранилища
Если я использую метод 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 отправляет действие, перехватывает саги, выполняет вызов Api и возвращает определенные данные для обновления состояния реакции после разрешения Promise.Конечно, это компромисс