Size: a a a

JavaScript Developers

2016 December 19

EU

Elnard Utiushev in JavaScript Developers
В которой первый console.log работает, а второй нет
источник

VZ

Vladimir Zhid in JavaScript Developers
Исключение в консоль вываливается?
По сути должно, сказать что у второго аргумента редьюсера отсутствует поле type

Если так, то предполагаю, что миделварь redux-thunk не подключена или подключенна неверно

(Могу ошибаться)
источник

DM

Daniel Manasov in JavaScript Developers
Elnard Utiushev
export function api(method, obj, callback) {
   console.info("New api request:", "/api/"+method);
   return (dispatch) => {
       console.info("New api request:", "/api/"+method);
...
Так ты вызываешь только внешнюю функцию, а не ту, что возвращаешь
источник

VZ

Vladimir Zhid in JavaScript Developers
Насколько я понимаю, функция "api" у него генератор-событий(action-creator), который вместо события возвращает другую функцию, миделварь thunk как раз позволяет это делать. Она вызывает внутреннюю функцию с передачей в нее dispatch, а внутренняя функция уже диспатчит события в стор
источник

EU

Elnard Utiushev in JavaScript Developers
Разобрался. Вызывал функцию не подвязав её через connect
источник

EU

Elnard Utiushev in JavaScript Developers
Спасибо за ответы
источник

VZ

Vladimir Zhid in JavaScript Developers
Всегда пожалуйста)
источник

EU

Elnard Utiushev in JavaScript Developers
источник

EU

Elnard Utiushev in JavaScript Developers
Еще вопрос. Можно ли как-то улучшить читаемость вот этого куска кода
источник

EU

Elnard Utiushev in JavaScript Developers
Отдельно по 3 действия на каждый метод метод решил не создавать
источник

EU

Elnard Utiushev in JavaScript Developers
И получилось как-то так
источник

VZ

Vladimir Zhid in JavaScript Developers
Мне кажется, что обернуть api("worlds", )...
в диспатч излишне

А так сложно сказать, не видя весь код)
источник

EU

Elnard Utiushev in JavaScript Developers
Vladimir Zhid
Мне кажется, что обернуть api("worlds", )...
в диспатч излишне

А так сложно сказать, не видя весь код)
Это как раз и было причиной предыдущей ошибки
источник

EU

Elnard Utiushev in JavaScript Developers
Можно конечно его передать в функцию, но мне кажется это так себе решение
источник

EU

Elnard Utiushev in JavaScript Developers
export function api(method, obj, callback) {
   console.info("New api request:", "/api/"+method);
   return (dispatch) => {
       dispatch({
           type: API_REQUEST
       })
       obj.token = store.getState().App.token;
       axios({
           method: 'post',
           headers: {'Content-Type': 'application/json;charset=utf-8'},
           url: 'http://localhost:4000/api/' + method,
           data: obj
       }).then((res) => {
           if(res.data.success) {
               console.log(res.data);
               dispatch({
                   type: API_REQUEST_SUCCESS
               });

               callback(res.data);
           } else {
               dispatch({
                   type: API_REQUEST_FAILTURE,
                   payload: {
                       error: res.data.err
                   }
               });
           }
       }).catch((err) => {
           if(err.message == "Network Error") err = "Ошибка соединения";
           dispatch({
               type: API_REQUEST_FAILTURE,
               payload: {
                   error: err.toString()
               }
           });
       });
   };
}
источник

VZ

Vladimir Zhid in JavaScript Developers
А почему сразу api не вызывать из компонента  или api сделать обычной функцией возвращающей промис, а к ней уже функции как getWorlds

А то получается, что генератор событий возвращает другой генератор, как то все сложно...)
источник

EU

Elnard Utiushev in JavaScript Developers
Просто во время запроса приложение показывает индикатор загрузки, и если что сообщение об ошибке
источник

EU

Elnard Utiushev in JavaScript Developers
А так бы пришлось при написании каждого метода все это повторять
источник

VZ

Vladimir Zhid in JavaScript Developers
Примерно понял для чего так сложно..
мне кажется что было бы проще если бы ты использовать только функцию api, а при успешном исходе проверял метод
switch (method){}
источник

VZ

Vladimir Zhid in JavaScript Developers
ой...
источник