• Что почитать для «посредственного» js разработчика?

    rockon404
    @rockon404
    Frontend Developer
    Хорошо изучите язык по любому хорошему учебнику от корки до корки, читайте статьи, изучаете решения типовых задач на stackoverflow, изучайте чужой код(например репозитории на Github), пишите свой и много.
    Лучше всего прогресс пойдет после устройства на работу.

    Еще почитайте о том как самостоятельно и эффективно находить нужную информацию. Один из самых полезных навыков.
    Ответ написан
    4 комментария
  • Как осуществить условный рендеринг в реакте?

    rockon404
    @rockon404 Куратор тега React
    Frontend Developer
    const rows = slides.reduce((acc, el, i) => {
      if(i % 3 === 0) acc.push([]);
      acc[acc.length-1].push(el);
    
      return acc;
    }, []);
    
    return (
      <Wrapper>
        {rows.map((row, index) => (
          <Row key={index}>
            {row.map((slide, i) => <Slide key={i} data={slide} />)}
          </Row>
        ))}
      </Wrapper>
    );
    Ответ написан
  • Почему получаю ошибку, когда пытаюсь использовать object spread?

    rockon404
    @rockon404
    Frontend Developer
    npm i -S babel-preset-stage-0

    {
      "presets": [
        "env",
        "stage-0",
        "react",
        "flow"
      ]
    }


    transform-class-properties можете смело выпиливать, так как stage-0 содержит в том числе и его.
    Ответ написан
    1 комментарий
  • Почему возникает Actions must be plain objects без ReduxThunk?

    rockon404
    @rockon404 Куратор тега React
    Frontend Developer
    Потому что redux-thunk это middleware и если бы вы заглянули в его исходники(всего 14 строк), то вы бы увидели, что он перехватывает и вызывает функции, передавая в них нужные аргументы и возвращает результат, не предавая его дальше. Без него их перехватывать нечему и они попадают туда куда не должны попадать и провоцируют ошибку, так как Redux без мiddleware на вход в dispatch принимает только объекты, о чем и говорится в тексте ошибки, которую вы получаете.

    Возвращаемое значение(return) в асинхронных действиях используется только вами, его возвращает вызов dispatch. В редьюсеры, как было озвучено выше, оно не попадает.
    Так как возвращается Promise, его можно использовать как-то так:
    Ваш Async action:
    export const asyncAction = (...someArgs) => async dispatch => {
      const res = await someAsyncCall(...someArgs);
      dispatch({ type: SOME_ACTION_TYPE, payload: res });
    
      return res;
    };

    Использование в коде(явный пример с dispatch):
    componentDidMount() {
      const { dispatch } = this.props;
    
      dispatch(asyncAction(...optionalArgs)).then(result => doSomething(result));
    }

    То же самое с проброской async action через connect:
    componentDidMount() {
      const { asyncAction } = this.props;
    
      asyncAction(...optionalArgs).then(result => doSomething(result));
    }


    Вообще, для использования then значение из асинхронной функции возвращать совсем не обязательно и такой код тоже будет прекрасно работать:
    export const asyncAction = (...someArgs) => async dispatch => {
      const res = await someAsyncCall(...someArgs);
      dispatch({ type: SOME_ACTION_TYPE, payload: res });
    };

    Использование в коде(явный пример с dispatch):
    componentDidMount() {
      const { dispatch } = this.props;
    
      dispatch(asyncAction(...optionalArgs)).then(() => doSomething());
    }
    Ответ написан
    8 комментариев
  • Как будет выглядеть аналогичный код на любом action creator?

    rockon404
    @rockon404 Куратор тега React
    Frontend Developer
    Вопрос поставлен некорректно. Action creators - это функции возвращающие объекты действия(Actions) те, что у вас в actions.js
    Action это объект со свойством type(типом действия) и опционально полезной нагрузкой, который передается в dispatch.

    redux-actions и redux-act это бойлерплейт утилиты для генерации action creators и редьюсеров. Советую пока даже не смотреть в их сторону(а можно и вообще не смотреть), лучше хорошо изучите голый API Redux.
    Еще советую потратить время на знакомство с immutable.js

    И еще, ваш код в actions.js не будет работать, так как функции loading, success, error используются раньше, чем определены.
    Либо поменяйте местами, так чтобы send был объявлен под ними:
    const loading = () => ({ ... });
    const success = () => ({ ... });
    const error = (message) => ({ ... });
    
    export const send = ({ name, phone }) => { ... };

    либо используйте для них ключевое слово function:
    export const send = ({ name, phone }) => { ... };
    
    function loading() { 
      return { ... };
    };
    
    function success() { 
      return { ... };
    };
    
    function error(message) { 
      return { ... };
    };

    А тут можете почитать о разнице между Function Declaration и Function Expression.
    Ответ написан
    Комментировать
  • Как правильно рассчитывать себестоимость работ для проекта?

    rockon404
    @rockon404
    Frontend Developer
    С опытом придет. Разбивайте объем работ на конкретные задачи и оценивайте в часах. К итоговому времени немного добавьте на отладку и тестирование.
    Ответ написан
    Комментировать
  • Автообновление по id Javascript?

    rockon404
    @rockon404
    Frontend Developer
    Вы время получаете один раз при инициализации и значения никогда не меняются. Перенесите получение времени в функцию Test:
    function Test(){
      var D = new Date(); // Получение текущего времени
      var D_M = D.getMinutes(); // Минуты
      /* остальной код функции */
    }
    Ответ написан
    1 комментарий
  • Как правильно составить резюме если нет опыта работы?

    rockon404
    @rockon404
    Frontend Developer
    Перечислить:
    1. Зарплатные ожидания(тут без опыта все будет печально)
    2. Немного о себе
    3. Образование
    4. Ключевые навыки
    5. Качества
    6. Пишите, что нет опыта работы в IT, но если реализовали самостоятельно учебный или собственный проект укажите это.

    Как другие выбиваются, так и вы пробуйте. Шлете резюме в разные компании. Публикуете на HH и Moikrug. Еще полезно сделать профиль на LinkedIn, со временем обрастете знакомствами и будут сыпать в личку разного рода предложения. Переодически проверяете почту. Ну и зарплатные ожидания адекватные для вашего региона ставьте. Будьте готовы даже не к должности джуна, а к тому, что вас стажером или на обучение возьмут. Тут все от ваших навыков, конечно, зависит. Сам в IT в 28 пришел.
    Ответ написан
    8 комментариев
  • Как выровнять before внутри div?

    rockon404
    @rockon404
    Frontend Developer
    Элементарно:
    :before {
      position: absolute;
      top: 50%;
      left: 50%;
      transform: translate(-50%, -50%);
    }
    Ответ написан
    8 комментариев
  • Для переопределения css файл нужно подключать выше или ниже?

    rockon404
    @rockon404
    Frontend Developer
    Ниже.
    Ответ написан
    Комментировать
  • Почему ссылка замыкается на последний элемент экземпляра?

    rockon404
    @rockon404
    Frontend Developer
    Потому что у вас свойство elements в прототипе. Все экземпляры используют один и тот же объект elements. В итоге сколько экземпляров вы не создадите, во всех будет один и тот же объект this.opions.elements со свойством link переопределенным в конструкторе последнего экземпляра.
    Поосторожней с прототипами. В прототипы помимо функций выносят только статику, но никак не динамические значения, разве, что счетчики, но это очень узко применимый и редкий кейс.
    Ответ написан
    9 комментариев
  • Как вернуться к начальному состоянию редюсера в redux?

    rockon404
    @rockon404 Куратор тега Redux
    Frontend Developer
    const RESET = 'MODULE_NAME::RESET';
    
    const reset => () => ({ type: RESET });
    
    const initialState = {
      // someState
    };
    
    const reducer = (state = initialState, action) => {
      const { type, payload } = action;
    
      switch (type) {
        case RESET:
          return initialState;
        // ...
      }
    };
    Ответ написан
    Комментировать
  • Является ли корректным в идеологии Redux диспатчить экшен постфактум?

    rockon404
    @rockon404 Куратор тега React
    Frontend Developer
    А зачем вам понадобилась подобная интеграция роутинга с Redux? Я к тому, что многие люди пихают в стор все подряд, сами не понимая зачем.

    смена роута > dispatch > обновление state

    Непонятно зачем вообще в этой схеме dispatch > обновление state, почему бы не использовать
    dispatch(push('/somePlace')); раз уж в проекте используетеся react-router-redux?

    Насколько я знаю, redux предполагает несколько иную очередность: dispatch > смена роута в ответ на dispatch > обновление state.


    Непосредственно Redux предполагает только dispatch > обновление state. Остальное это middleware и сайд эффекты.

    Мы в последних двух проектах вообще не использовали react-router-redux.
    Ответ написан
    1 комментарий
  • Где ошибка в коде?

    rockon404
    @rockon404
    Frontend Developer
    var trouble = +prompt('What is wrong?');
    
    var CABEL = 1;
    var ROUTER = 2;
    var COMPUTER = 3;
    
    switch (trouble) {
      case CABEL:
        console.log('check your cabel');
        break;
      
      case ROUTER:
        console.log('check your router');
        break;
      
      case COMPUTER:
        console.log('reload your PC');
        break;
      
      default:
        console.log('uncorrect trouble');
    }
    Ответ написан
    Комментировать
  • Как решить проблемы с клавиатурой MacBook Pro 2017?

    rockon404
    @rockon404
    Frontend Developer
    С чего вы взяли, что MBP "дорожный ноут"? Несите в сервис.
    ИМХО, в дороге был бы гораздо удобней MBP ''13 2015. И стоит он больше чем в 2 раза дешевле, убить в дороге не так жалко.
    Ответ написан
    2 комментария
  • Как реализовать 3 резиновых блока с фиксированными отступами?

    rockon404
    @rockon404
    Frontend Developer
    .row {
      margin: 0 -15px;
    }
    
    .row:after {
      content: "";
      display: table;
      clear: both;
    }
    
    .col {
      float: left;
      width: 33.33333%;
      padding: 0 15px;
    }


    <div class="row">
      <div class="col">
        <div class="your-blue-div">div1</div>
      </div>
      <div class="col">
        <div class="your-blue-div">div2</div>
      </div>
      <div class="col">
        <div class="your-blue-div">div3</div>
      </div>
    </div>

    где .your-blue-div - ваш блок.
    Ответ написан
    3 комментария
  • Как работают объекты?

    rockon404
    @rockon404
    Frontend Developer
    Потому что и a и b это ссылки на один и тот же объект.
    Тут подробнее.
    Ответ написан
    2 комментария
  • Как реализировать подобный функционал на react + REDUX?

    rockon404
    @rockon404 Куратор тега React
    Frontend Developer
    В самом простом варианте.
    1. При загрузке приложения по опеределеному роуту, разбирать query string на составляющие и по ним делать запрос к API и рендерить состояние фильтров.
    2. По клику на фильтр, обновление его состояния и push нового location с query string, собранной по новому состоянию фильтра.
    Ответ написан
    9 комментариев
  • Где джуну получать тестовые задания?

    rockon404
    @rockon404 Куратор тега React
    Frontend Developer
    Для тестового задания надо что-нибудь посложней. Простенький real world app.

    Например простенький Weather App:
    1. Строка поиска городов(можно использовать например API Google):
    2. Результат поиска с погодой.
    3. Список сохраненных городов.
    4. Погода в текущей позиции.
    Для погоды можно использовать API любого сервиса(например OWM API).
    Такое приложение спроектировать сложней, тут помимо тупой работы с API библиотек придется проектировать.
    Можно использовать роутинг, а можно обойтись и без него. Да и целый ряд задач, над решением которых новичку придется хорошо подумать:
    1. Структура приложения
    2. Работа с API
    3. Реализация строки поиска
    4. Обработка исключений( нет связи, отклонили использование геолокации)
    5. Верстка
    Когда такой проект начнет оживать и работать как задумано это, конечно, принесет человеку радость и уверенность в себе.

    Так же можно реализовать Dashboard, но это посложней и требует серверной части или использование публичного тестового API вроде Star Wars API
    Еще можно реализовать простенький клиент для любого сервиса. Например поиски и проигрывание видео c Youtube.

    ИМХО совсем простые задачи, конечно могут показать знание API той или иной библиотеки, но обладает ли кандидат навыками необходимыми для Junior Developer они не отразят. А Junior Developer должен уметь самостоятельно решить точно поставленную задачу с пояснениями и рекомендациями по пути ее решения.
    Ответ написан
    8 комментариев
  • Хотите задать вопрос администрации Тостера?

    rockon404
    @rockon404
    Frontend Developer
    Сервису не хватает минусов для ответов. Бывает не очень опытный человек публикует плохой ответ, который вроде работает, но является очень плохим решением. Самое интересное, что такие ответы часто набирают плюсы. Если бы была возможность поставить минус, уверен они бы были заминусованы и не сбивали с толку людей столкнувшихся с похожей проблемой.

    UPD: По поводу вкладки Избранное еще в комментариях к вопросу написал.
    Ответ написан
    54 комментария