Вызов методов компонента после завершения вызова API redux-saga: использовать componentDidUpdate или передать метод создателю действия? - PullRequest
0 голосов
/ 29 ноября 2018

Я борюсь с преобразованием существующего проекта 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?

...