Я борюсь с преобразованием существующего проекта React в redux-saga.Я изучаю redux-saga, потому что команда, к которой я присоединяюсь, попросила меня, и я подумал, что преобразование этого проекта было бы хорошим способом изучения.
Главная проблема, с которой я столкнулся, заключается в том, что мой проект был оченьна основе обещаний и, особенно в App.js, я мог совершать вызовы API, а затем предпринимать различные действия в зависимости от успеха или неудачи.
Используя redux-saga, я в значительной степени потерял этот элемент управления: если я не используюпакет типа redux-thunk-saga
или мониторинг переменных в хранилище, чтобы попытаться определить, успешно ли выполнен вызов API, я не знаю, были ли успешными мои вызовы API.
В частности, после того, как мой пользователь вошел в систему, я хочу настроить слушатели socketIO.У меня есть метод в App.js, который делает это.Но если я запускаю сагу authenticate
, я не знаю, удалась ли она, чтобы вызвать мой метод setupSocketIO
.
Одним из решений, о котором я подумал, было наблюдение за избыточностью state
и проверка, изменился ли мой токен входа в систему с помощью componentDidUpdate
.
Другое возможное решение - передать метод setupSocketIO
в качестве параметра моему создателю действия authenticate
.Вроде как в app.js (в псевдокоде)
/* APP.JS */
import {authenticate} from actionCreators
dispatch(authenticate(name, password, this.setupSocketIO.bind(this))
setupSocketIO = (name,token) => {
...
}
/* SAGAS/AUTHENTICATE.JS */
function* authenticate() {
try {
const {name,password, setupSocketIO} = yield (actionTypes.AUTHENTICATE)
const token = call(apiLogin(name,password)
call(setupSocketIO(name,token)
} catch (error) {
...
}
, чтобы аутентифицировать сагу call
s этот метод, если вход успешен.
Какой из двух(если любой) будет лучшим подходом, чтобы позволить компоненту вызывать свои собственные методы при завершении вызова API?