• Как сделать правильно ajax запрос в React Redux?

    maxfarseer
    @maxfarseer
    https://maxpfrontend.ru, обучаю реакту и компании
    Сделал подобный туториал, где разбираются и асинхронные запросы тоже. Буду рад если помогу - https://www.gitbook.com/book/maxfarseer/redux-cour...
    Ответ написан
    1 комментарий
  • Как сделать правильно ajax запрос в React Redux?

    @vsuhachev
    Т.к. ajax запросы асинхронные то на каждый такой запрос делается 3 ветки развития событий:
    • запрос отправлен
    • запрос завершился успешно
    • запрос завершился с ошибкой


    В коде это будет выглядеть как-то так
    export function loadInfo() {
        return dispatch => {
    
            dispatch({
                type: 'LOAD_INFO_REQUESTED'
            });
    
            request.get(
                Routes.root_path(),
                {headers: {'Accept': 'application/json'}}
            )
                .then(result => {
                    dispatch({
                        type: 'LOAD_INFO_OK',
                        info: result.data
                    })
                })
                .catch(result => {
                    dispatch({
                        type: 'LOAD_INFO_FAIL',
                        errors: result.statusText
                    })
                })
        }
    }

    Т.е. сначала экшн оповещает хранилище(store) что начал запрос и делает сам запрос. Далее в зависимости от результата хранилище будет оповещено либо от успехе либо об неудаче.
    Чтобы получить доступ к dispatch внутри экшена используется redux-thunk, который вы уже установили.

    Далее редуцер, обрабатывается 3 типа событий из экшена
    const defaultState = { loading: false, info: null, errors: null };
    
    export default function info(state = defaultState, action) {
      switch (action.type) {
    
        case LOAD_INFO_REQUESTED:
          return { loading: true };
    
        case LOAD_INFO_OK:
          return { loading: false, info: action.info, errors: null };
    
        case LOAD_INFO_FAIL:
          return { loading: false, info: null, errors: action.errors };
    
        default:
          return state;
      }
    }


    Компонент должен быть подключен к хранилищу с помощью connect, без него компонент не увидит store
    @connect(state => ({
        info: state.info
    }))
    
    class Info extends Component {
    
        componentDidMount() {
            const { dispatch } = this.props;
            dispatch(loadInfo()) // Вызываем загрузку
        }
    
      render() {
        const { loading, info, errors } = this.props.info;
    
        if (loadind) { return (<div>Loading</div>) }
        if (errors != null) { return (<div>Error!</div>) }
        return (
          <div>
            { info }
          </div>
        );
      }
    }


    Вобщем как-то так. В хэлпе на redux это все описано.
    Ответ написан
    5 комментариев
  • Как уйти от коротких задач во фрилансе?

    xmoonlight
    @xmoonlight
    https://sitecoder.blogspot.com
    просто проходите мимо таких проектов.
    Ответ написан
    Комментировать
  • Nginx - как переписать url?

    xamd
    @xamd
    javascript-ninja
    server {
        # Порт
        listen 80;
    
        # Имя сервера
        server_name host.com;
    
        # Путь до статики
        root /var/www/;
        
        # Все файлы, которые будут совпадать по маске со сл. рег. выр., будут
        # обслуживаться nginx: сначало будет запрос как к файлу (например, host.com/js/main.js),
        # если файла не будет, то запрос будет переформирован как к директории (host.com/js/main.js/),
        # и если по прежнему ничего не найдено, вернется 404 ошибка
        location ~* ^.+\.(jpg|jpeg|gif|png|svg|js|css|mp3|ogg|mpe?g|avi|zip|gz|bz2?|rar|3gp|mp4)$ {
            try_files $uri $uri/ =404;
        }
    
        # Все остальные запросы, котоыре не подходят по маске статических файлов, описанных выше,
        # будут перенаправлены на localhost.
        # Первая строчка - адрес перенаправления, вторая - устанавливает заголовок Host. Если вы используете
        # выделенный сервер и он используется только под один проект - её можно опустить.
        location / {
            proxy_pass http://localhost:1001;
            proxy_set_header Host $host;
        }
    }


    Более подробно про proxy_pass хорошо написано в официальной документации проекта nginx или же в статье про начало работы с nginx
    Про Header заголовок можно прочитать здесь (к сожалению, на русском нормального изложения материала не нашел, может кто поправит?)

    Всех благ, и успехов в изучении nginx!
    Ответ написан
  • Nginx - как переписать url?

    @Nc_Soft
    Если у тебя это раньше на апаче работало, то можно и отдать это апачу в изначальном виде. А nginx поручить обработку только статики (html, js, css, png, etc).
    Так многие хостеры с панельками и делают
    server {
    		server_name example.com;
    		listen 80;
    		set $root_path /var/www/data/example.com;
    		location ~* ^.+\.(jpg|jpeg|gif|png|svg|js|css|mp3|ogg|mpe?g|avi|zip|gz|bz2?|rar|3gp|mp4)$ {
    			expires max;
    			root $root_path;
    			error_page 404 = @fallback;
    		}
    		location / {
    			proxy_pass http://127.0.0.1:81;
    			proxy_redirect http://127.0.0.1:81/ /;
    			proxy_set_header Host $host;
    			proxy_set_header X-Real-IP $remote_addr;
    		}
    		location @fallback {
    			proxy_pass http://127.0.0.1:81;
    			proxy_set_header Host $host;
    			proxy_set_header X-Real-IP $remote_addr;
    		}
    	}
    Ответ написан
    Комментировать