• Нужно ли при POST запросе делать reducer в redux'е?

    Laiff
    @Laiff
    Front-end developer
    Никита Гущин Верно заметил, про сохранение статуса, только уточню, что место для добавления вызовов это middleware, ибо в противном случае редьюсер будет иметь сайд-эффекты, которых иметь не должен.
    Например для отправки запросов может быть интересен этот мидл https://github.com/alanrubin/redux-simple-promise
    Так же для локализации всех сайд-эффектов есть очень интересный проект https://github.com/redux-effects/redux-effects , сейчас я им пользуюсь в своем проекте
    Ответ написан
    Комментировать
  • Нужно ли при POST запросе делать reducer в redux'е?

    Редьюсер нужен когда Вы хотите хранить состояние. Это может быть, например, статус запроса - упех/в процессе/ошибка. И исходя из этого сделать кнопку "отправить" не активной, показать индикатор загрузки и т.д.
    Ответ написан
    1 комментарий
  • Где и как нужно сделать AJAX запрос в redux?

    Для работы с promise Вам нужно использовать дополнительный middleware - promise middleware. Существует несколько реализаций - можете выбрать любой понравившийся. Я использую этот и относительно него буду далее писать.

    Как я понял, запрос пишется в action creator при помощи промиса


    Да, все так. В экшен-креаторе делаем запрос, возвращаем экшен с промисом. Далее promiseMiddleware подхватывает его и вместо одного экшена диспатчит 3 - действие началось, действие завершилось успешно, действие завершилось с ошибкой. Все это происходит в зависимости от того в какое состояние попал вышеупомянутый promise. Другими словами - "действие началось" диспатчится сразу; если запрос успешен - диспатчится "действие завершилось успешно".
    Соответственно в вашем редьюсере Вы подписываетесь на это три действия. Пример:

    // action creator
    import fetch from 'isomorphic-fetch';
    
    export default function getBook() {
      // Для запросов чаще всего используется  isomorphic-fetch, который возвращает promise
      const promise = fetch(url, options);
      return {
        types:  [ 'GET_BOOK-BEGIN', 'GET_BOOK-SUCCESS', 'GET_BOOK-FAILURE' ],
        promise,
      };
    }


    // reducer
    import {GET_BOOK} from '../actions/books';
    
    const booksReducer = (state = {}, action) => {
      switch (action.type) {
        case 'GET_BOOK-SUCCESS':
          // При успешном завершении у нас установлено свойство result с ответом сервера
          return action.result;
        case 'GET_BOOK-FAILURE':
          // При неудачном завершении у нас установлено свойство error с описанием ошибки
          doSomethingWithError(action.error); // <--- просто для примера
        default:
          return state;
      }
    };
    
    export default booksReducer;


    UPD1 К слову: у редакса есть отличный пример, где все это можно в живую посмотреть - https://github.com/rackt/redux/tree/master/example...
    Ответ написан
    6 комментариев
  • Как исправить ошибку "Invariant Violation: Objects are not valid as a React child"?

    Что вы пытаетесь сделать в методе рендер? Ошибка говорит о том, что вы вместо реакт-элемента рендерите объект(ы).

    Вам нужно сначала отфильтровать книги, а потом отрендерить их как элементы списка:

    render() {
        const {books, url} = this.props;
        return (
          <ul>
            {books.filter(book => book.name === url).map((book, key) => (
              <li key={key}>
                  <p>{book.name}</p>
                  <p><Link to={`/${book.author}`}>{book.author}</Link></p>
                  <p>{book.descrip}</p>
                </li>
            ))}
          </ul>
        );
      }
    Ответ написан
    2 комментария
  • Какой должен быть подход мышления для изучения программирования?

    saboteur_kiev
    @saboteur_kiev Куратор тега Программирование
    software engineer
    Путь мышления программиста должен быть терпеливый и усидчивый.

    Нужно понимать разницу между высоким и низким порогом входа в профессию. Дворником можно стать за час, программистом - за годы.
    Ответ написан
    Комментировать
  • Какой должен быть подход мышления для изучения программирования?

    SWAT_O_PLUS
    @SWAT_O_PLUS
    Мне не понятна суть вопроса. В чем конкретно проблема? Тут мы видим:
    * Пытаюсь учить JS.
    * Последнее, что делал, проходил скринкаст Кантора по созданию чата // какой тебе чат, ты же еще язык не выучил.
    * где узнать про те самые "базовые алгоритмы, структуры, подходы...

    Что за месиво, что за каша, что ты умеешь сейчас? Для чего тебе нужно программирование? Проект? Фриланс? Хобби?

    Все программирование начинается с С++, забей на JS, забей на веб. В первую очередь читай Герберт Шилдт "Полный справочник по C++" Читай, но не весь и постоянно пробуй это даже если скопируешь, изменишь и скомпилишь будет большой толк. Когда ты начнешь свободно ориентироваться в языке, то просто держи под рукой online-справочник по cpp типа www.cplusplus.com/reference . Все теперь ты владешь сpp.

    Далее два пути
    Спортивный
    знания тут - e-maxx.ru/algo учишь алгоритмы kpolyakov.narod.ru/school/probook/cpp.htm
    практика тут - acmp.ru www.e-olymp.com/ru codeforces.com - решаешь задачки, кстати именно в таком порядке посещаешь эти сайты, от простого к сложному. Там есть темы задач, выбрал простую тему, взял задачу, пытаешься найти нужный алгоритм на e-maxx, либо в гугле, только не надо задавать вопросы сюда, как решить этот "гроб".

    Проектный (прикладной)
    Тут ты смотришь на жестокий мир, и поражаешься почему никто до меня не сделал эту гениальную необходимую всем программу. Сюда так же входят те кто пишут игру своей мечты. Тут придется читать о проектировании, устройстве чего-либо аналогичного, учить всякие API. Лучше стать добрым программистом и начать с изучения cmake, git, github. А потом уже учить всякие API.

    Однажды тебе скажут, что с++ плохо и есть что-то лучше. Всякие решеточки, змеи, острова и прочая ересь. Не верь им, все чем они лучше это возможность написать код быстрее жертвуя производительностью. Используй другие языки когда это действительно оправдано, не гонись за модой. А самое главное использование C# никогда не оправдано.
    Ответ написан
    5 комментариев