• Насколько грубым нарушением считается писать логику в редьюсере а не в екшине?

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

    Ilyasyakubov
    @Ilyasyakubov
    Муж, Логист ВЭД, IT-блогер
    Давай так, котлеты отдельно - мухи отдельно. Твоя проблема это на самом деле две проблемы:
    1. Нарушен режим сна. Это поправить легче всего. Вне зависимости от того во сколько ты ляжешь сегодня спать, встань завтра в 7:00, на следующий день повторить и зациклить. Первые два дня будет тяжело - потом все выправится.
    2. Ты не умеешь в тайм-менеджмент, что в 21 веке как-то совсем прискорбно. Поправить это посложнее, но тоже реально. Списки дел, дневник, планирование дел на конкретные часы - все это фигня полная и в эпоху постмодернизма не работает. Все что тебе нужно сделать на первом этапе это прочесть книгу "Getting Things Done" Дэвида Аллена, она совсем небольшая и в ней есть все ответы. Прочесть можно за день, если штудировать то за 2-3.
    P.S. Обязательно прочти "Семь навыков высокоэффективных людей" Стивена Р. Кови. Название может казаться пафосным, не обращай на этот факт внимания, книга просто маст рид.
    P.P.S. Если после этого останутся вопросы - пиши, с удовольствием отвечу.
    Ответ написан
    3 комментария
  • Как построить свой рабочий день фрилансеру?

    iiiBird
    @iiiBird
    Пока ты спишь - твой конкурент совершенствуется
    3 комментария
  • Стоит ли переходить на React.PureComponent по-умолчанию?

    PQR
    @PQR
    React.PureComponent реализует метод shouldComponentUpdate таким образом, что он делает поверхностное сравнение props и state (не глубокое). Вот собственно код:
    https://github.com/facebook/react/blob/c8fbdac2271...
    shouldUpdate =
                !shallowEqual(prevProps, nextProps) ||
                !shallowEqual(inst.state, nextState);


    Что такое shallowEqual? Это по сути сравнение оператором === каждого элемента из prevProps с каждым элементом из nextProps. На всякий случай дам ссылку на реализацию для полного понимания: https://github.com/facebook/react/blob/6963ea4bfcd...

    В итоге всё зависит от структуры ваших props. Если в props вы передаёте объекты которые иногда мутируются, т.е. по ссылке они равны ===, но внутри какие-то данные поменялись (что само по себе выглядит странно в экосистеме redux + reselect, но вполне возможно технически), тогда использование PureComponent вам всё поломает, т.к. на экране какие-то компоненты перестанут перересовываться!

    Если же у вас всё по уму, данные которые передаются через props являются скалярными типами (string, int, float, bool) или immutable объектами, тогда смело используйте PureComponent - в некоторых случаях он поможет избавиться от лишних вызовов render.

    Важное замечание: PureComponent нужно использовать только для так называемых presentational components, т.е. для тех компонент, которые НЕ обёрнуты в вызов redux connect().

    Для container components (т.е. тех компонент, которые обёрнуты в redux connect()) нет смысла наследоваться от PureComponent, т.к. метод connect() оборачивает ваш компонент своей реализацией shouldComponentUpdate, которая также использует shallowEqual. Если вы по недосмотру унаследуете container component от PureComponent - ошибок не будет, но это не имеет никакого смыла, т.к. ваш код по сути будет дважды делать shallowEqual, а зачем делать лишнюю работу?

    Подводя итог, рецепт такой:
    - presentational components наследуем от React.PureComponent
    - container components (которые обёрнуты в redux connect()) наследуем от старого доброго React.Component
    Ответ написан
    1 комментарий
  • Как вы добавляете коммиты?

    HeadOnFire
    @HeadOnFire
    PHP, Laravel & WordPress Evangelist
    Атомарно. Часто. Любой целостный, завершенный и логический кусок или кусочек, независимо от размера. И не важно - сам пилю, или с командой. Это вопрос привычки - поначалу и лень, и смысла вроде не видишь. Со временем привыкаешь. И когда приходит время воспользоваться прелестями атомарных коммитов (а оно приходит) - откат фичи или возврат ранее откаченной (по требованию клиента), разрешение конфликтов и тд - радуешься и благодаришь себя прошлого за то, что не поленился.

    И еще, очень важно писать адекватные commit message. Никаких "minor fix" и тому подобное. По месседжу должно быть четко понятно при листании истории что к чему и зачем, без необходимости смотреть diff. В идеале, еще и привязка к issues - но это актуально в командной работе, одному не надо.

    Что касается бранчей - сильно зависит от проекта. В командной работе это либо feature branches (git flow или своя произвольная схема), либо у каждого своя ветка и там делай что хочешь. Тут смысл в первую очередь в пулл-реквестах, code review, CI и стабильном мастере, в котором всегда находится рабочий код. Если работать одному - лично я привык бранчевать каждую отдельную фичу (не фрагмент, а именно модуль, автономный кусок функциональности). Удобно на серверах чекаутить конкретный бранч, тестить, возвращаться на мастер. И это позволяет одновременно работать над несколькими фичами. Например, одну допилил, отдал на утверждение клиенту, а там есть комменты/фиксы, но ждешь какие-то материалы. Переключился на другую фичу и безопасно работаешь в другом бранче. В общем, удобно и надежно.
    Ответ написан
    Комментировать
  • Как запретить действия submit?

    @t38c3j
    $('form').on('submit', function (event) {
        event.preventDefault();
        // ваши манипуляции 
    });
    Ответ написан
    Комментировать
  • Должен ли back-end разработчик уметь верстать?

    @nirvimel
    А еще вы должны подметать и мыть пол на своем рабочем месте, если вы живете один, работаете дома и в одиночку беретесь решать все проблемы заказчика от удаленной настройки его операционки и браузера до смены цветовой палитры (уже запущенного!) сайта под цвет ногтей его подруги.

    Если же вы являетесь редким специалистом в своем узком секторе рынка труда, то спрос на вас со стороны работодателей/заказчиков будет стабильно высоким, вы сами сможете диктовать им свои условия (в рамках разумного), и ни одному менеджеру/директору в здравом уме не придет в голову тратить время такого специалиста (а значит - свои деньги) на то, что способен сделать любой из миллиона индусов.
    Ответ написан
    Комментировать
  • Как правильно вести разразработку в PhpStorm?

    greabock
    @greabock
    Могу
    Правильно - использовать систему контроля версий. Например git.
    Если совсем правильно, то для деплоя нужно использовать, соответствующий инструмент (например Capistrano или любой другой аналог)
    Для бедных, можно настроить банальный хук.
    При пуше (или мерже) допустим в мастер, на рабочий сервер улетает хук. Обработчик хука в свою очередь стянет все изменения из репозитория системы контроля версий, и запустит все необходимые команды (миграции, прогрев кеша, и вообще всё, что душе угодно).
    Ответ написан
    Комментировать
  • Что такое API в проекте на react?

    maxfarseer
    @maxfarseer
    https://maxpfrontend.ru, обучаю реакту и компании
    У вас приведено 2 куска кода из 2х разных миров:
    1) это код из мира фронтенда, в котором вы выполняете запрос на /api/user/
    2) это код из мира бэкэнда, в котором вы обрабатываете роут ???/user (почему ???, потому что не видно главного файла сервера, но если представить, что вы разбираете какой-то рабочий пример, скорее всего это и есть обработчик /api/user роута)

    API (wikipedia)

    Как это завязать на API

    1. Делается сервер (на любом из языков), который в принципе является набором роутов, например:
    GET на роут /products - отдает все продукты
     POST на роут /products/add - создает новый продукт
     GET на роут /proudcts/1231rh8fdf - отдает один продукт с id 1231rh8fdf
     DELETE ...
     PUT ...

    2. Пишется клиент, если в рамках реакт-редукса, то главное в вашем вопросе, это то что вы уже привели - запросы на определенный роут в action creator.
    Например:
    export function signIn(email, password) {
      return dispatch => {
    
        dispatch({
          type: USER_SIGN_IN_REQUEST,
        })
    
        const data = {
          session: {
            email,
            password,
          },
        }
    
        httpPost(`http://${API_ROOT_V1}/api/sessions`, data)
          .then((data) => {
            dispatch({
              type: USER_SIGN_IN_SUCCESS,
              data: data.account,
            })
          })
          .catch((err) => {
            console.warn(`Sign in error: ${err}`) //eslint-disable-line no-console
            dispatch({
              type: USER_SIGN_IN_FAILURE,
              err,
            })
          })
      }
    }

    Этот action creator (создатель действий) делает POST запрос на API-сервер (можно и так называть сервер в частном порядке) вместе с логином и паролем. Далее сервер обрабатывает этот запрос (то есть ищет совпадение роута и метода (get/post/put..) и выполняет необходимые операции, после этого выдает ответ (например, json с данными о юзере) и вы эти данные устанавливаете в ваш reducer.

    Все что вам нужно, это действительно, разобраться что же такое API и с чем его едят. Конкретных статей на это, к сожалению, дать не могу. Может быть кто-то подскажет дельные.

    Итого: что такое API в проекте на React - вопрос не корректный. Правильный вопрос: как вы взаимодействуете с API в приложениях написанных на react, либо: как написать API на языке ХХХ (пример на англ для node.js и express - https://scotch.io/tutorials/build-a-restful-api-us...
    Ответ написан
    Комментировать
  • Как защитить свою верстку от рипа?

    xmoonlight
    @xmoonlight
    https://sitecoder.blogspot.com
    Порядок действий; переход к следующему пункту, если предыдущее действие - недоступно:
    1. БЗ (безопасная сделка или сделка без риска) - это первым делом!
    2. Поэтапная работа с предоплатой: самый надёжный вариант.
    3. Поэтапная работа с пост-оплатой: считайте, что каждый этап - вы будете выполнять в кредит и на любом из них Заказчик может уйти не заплатив!
    4. Предоплата 50% за всё сразу.
    5. Предоплата 1/3 за всё сразу: обычно соглашаются, если не "кидалы".
    6. Поднимаете виртуалку у себя с разными браузерами (обязательно режим киосков!), даёте доступ через VNC и пусть смотрит.
    Ответ написан
    Комментировать
  • Psd без фотошопа?

    zorro76
    @zorro76
    К выше всему перечисленному, добавлю assets.adobe, очень удобный инструментарий для верстальщика, причем разделение по слоям, описание стилей css, цветовая гамма сайта, размеры, шрифты, работа с svg и сохранением img непосредственно в проект. Очень удобно и практично и бесплатно, получил ID Adobe и пользуйся.
    Ответ написан
    3 комментария
  • В чем моя причина провала тестового задания Яндекса?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Ну давайте я покритикую:

    возьмем файлик

    1) вы не разобрались как объявлять методы у прототипов с новой нотацией `class`:

    class Travelsort {
        constructor() {}
        sortTickets(tickets) {}
    }


    2) вы не умеете пользоваться исключениями.
    if (!Array.isArray(cards)) {
        throw new ValueError('Wrong input');
    }


    3) использование let там где должен использоваться const

    4) в принципе использование переменных там где их быть не должно

    5) вы зачем-то реализовали свою функцию сортировки, я не увидел в требованиях отсутствия возможности использовать старый добрый Array.prototype.sort

    6) Общие замечания по кодинг стайлу. snake_case там где должен быть camelCase, пишите с большой буквы то что должно быть с маленькой и т.д.

    7) нарушения принципа единой ответственности. У вас объеткт умеет и сортировать и писать куда-то. Это категорически плохо.

    8) Если исправить 7-ой пункт то наш класс превращается просто в функцию.

    Далее... берем следующий файлик

    1) если вы пишите комментарии к таким маленьким кускам кода - стало быть у вас хромает именование вещей. Все должн быть понятно просто из названий методов/функций/переменных. При работе в команде над серьезными проектами это немаловажно, ибо код чаще читают чем пишут и экономить нужно именно это время.

    2) вы зачем-то тут в прототип объекта строки впихиваете функции для парсинга CSS. Таким образом мы нарушаем принцип единой ответственности. Да и в целом расширять без надобности прототипы объектов как-то не ок.

    Чуть дальше проскролил - вы пытаетесь расширить прототип строк для того что бы добиться API jquery? ух, батенька.

    3) очень много дублирования.

    4) очень плохо с protected variations.

    Справедливости ради, ваш код входит в категорию ">50% JS кода", так что не расстраивайтесь. Просто для работы в яндексе нужен чуть более высокий уровень и понимание вещей.
    Ответ написан
    17 комментариев
  • Какие есть обучающие ресурсы по фронтенд разработке?

    edward04
    @edward04
    Начинающий ninja frontend
    https://www.youtube.com/channel/UC7enHM_oJRYJOnyJr...
    https://www.youtube.com/channel/UCZeU17nbVfzczAkJV...
    https://www.youtube.com/channel/UCHHw70vvbfyM6xJQo...
    https://www.youtube.com/channel/UCIIt69f5D44s2cdb9...
    tohtml.it/post/74511047203/markup-process

    По нему скучаю искренне и иногда сижу на подоконнику с лате и смотрю на капли дождя, стекающие по стеклу:
    https://www.youtube.com/channel/UCdnFX7mzgup9moXG2...
    Это для общего развития:

    https://stepic.org/course/%D0%90%D0%BD%D0%B0%D0%BB...

    Похожий вопрос:
    Какие задачи нужно уметь выполнять на JS начинающему?

    Ваша библия:
    https://developer.mozilla.org
    Можно докинуть еще:
    webref.ru
    htmlbook.ru
    Просто случайная ссыль
    https://docs.google.com/document/d/1kehaJKKRo7zxYp...
    Еще одна:
    https://github.com/ihorzenich/html5checklist
    Еще какая то штука
    https://github.com/dypsilon/frontend-dev-bookmarks
    Лучшие практики тостеровцев
    Как вы начинаете вёрстку сайта?
    Инструменты
    fredsarmento.me/frontend-tools

    После пары часов выпускания пара из ушей, включить на всю громкость и хоть как то отвлечься от этой жизни
    https://www.youtube.com/channel/UCY0C6A3t3RTUN3BB6...

    На freecodecamp.com неплохо алгоритмы можно потренить

    Ну и конечно
    learn.javascript.ru

    PS
    еще это
    Какие ресурсы с новостями по web-разработки вы знаете?

    PSPS
    Не отвечаю за качество контента под ссылками, может кое что уже outdated.

    https://vk.com/video79753760_171233585

    Удачи, брат
    Ответ написан
    4 комментария
  • Как сделать один символ в HTML атрибуте placeholder другим цветом?

    Lumore
    @Lumore
    Front-end developer
    #input::-webkit-input-placeholder::first-letter {color:#c0392b;}
    #input::-moz-placeholder::first-letter          {color:#c0392b;}/* Firefox 19+ */
    #input:-moz-placeholder::first-letter           {color:#c0392b;}/* Firefox 18- */
    #input:-ms-input-placeholder::first-letter      {color:#c0392b;}
    Ответ написан
    2 комментария
  • Шаблон сопроводительного письма Upwork?

    dicem
    @dicem
    Я вот например начинаю сопроводительные письма с того, как будто уже начал изучать его проблему без его утверждения, вобще безотказный вариант, иногда даже сами заказчики писали мол "вы уже начали? Давайте созвонимся я не все указал в задании"
    Ответ написан
  • Как часто используются дескрипторы, декораторы и bind, call, apply?

    bingo347
    @bingo347 Куратор тега JavaScript
    Crazy on performance...
    Обо всем по порядку

    Дескрипторы - так понимаю речь идет о дескрипторах свойств объекта. Вещь крайне полезная, позволяющая задать поведение свойству, сделав его не перечисляемым или, например, только для чтения, а так же можно задать функции getter/setter, которые будут вызываться при чтении/записи свойства. Используется довольно часто.

    Декораторы функций. Позволяют избежать дублирования кода. Допустим, подключаете Вы некую библиотеку, в которой есть некоторая функция, Вам необходимая. Пусть она делает некое действие А, но Вам регулярно нужна последовательность действий А и Б. Тогда Вы пишите над этой функцией обертку, выполняющий эту последовательность, и уже вместо библиотечной функции + действие Б используете везде свою обертку. А вот если у Вас таких оберток с действием Б довольно много, то уже нужен декоратор, который позволит создавать такие обертки для любой функции. Используется как правило в крупных проектах, так как снижает вероятность ошибок.

    bind - по сути является декоратором встроенным в язык. Позволяет привязать к функции контекст и начальные аргументы. Используется постоянно, особенно в случае передачи функции во внешний код.

    call и apply позволяют вызвать функцию с нужным контекстом, разница в том что apply принимает 2 аргумента - контекст и массиво-подобный объект содержащий аргументы, а call принимает произвольное число аргументов: 1й - контекст, последующие передаются как аргументы функции. Используется постоянно.

    Карринг. Хоть и используется не так часто, но бывает весьма полезным инструментом. По сути цепочки промисов построены на принципах карринга, только не функций, а объектов.

    Ну и напоследок, конструкция var self = this; позволяющая сохранить контекст в замыкании уже потихоньку уходит в прошлое, благодаря стрелочным функциям из es2015
    Ответ написан
    1 комментарий
  • Порекомендуйте англоязычный подкаст с IT тематикой и хорошим произношением у участников?

    HalfBloodPrince
    @HalfBloodPrince
    Front-End Developer
    developertea.com
    fivejs.codeschool.com

    Я слушаю вышеперечисленные, произношение понятное, а еще кто-то поделился своим списком - https://pawelgrzybek.com/my-favourite-front-end-re...
    Ответ написан
    Комментировать
  • Что должен знать и уметь front-end разработчик?

    Serj-One
    @Serj-One
    i'm sexy and i know it
    Должен уметь пользоваться гуглом. Он выдаёт не один десяток вопросов, полностью идентичных вашему, в том числе и на этом ресурсе, и все возможные ответы на них уже неоднократно даны.
    Ответ написан
    2 комментария
  • Есть ли возможность без JS, чтобы при нажатии на блок он убирался?

    webirus
    @webirus
    Тыжверстальщик! Наверстай мне упущенное...
    Я вот думаю, а зачем вы иногда придумываете такие сложности?
    Код jQuery, 2 строки, сама библиотека почти везде подключена.
    На чистом JS будет чуть больше строк, но не суть.
    Так зачем измудряться, делать на чистом CSS?
    По сабжу, можно. Обернуть блок в label и эмулировать клик.
    Как большой чекбокс получается у вас.
    https://jsfiddle.net/webirus/a2w1aecb/
    Ответ написан
    1 комментарий
  • Как сделать title для каждой страницы?

    xmoonlight
    @xmoonlight
    https://sitecoder.blogspot.com
    ассоциативный массив в роутере или в головном файле шаблона: partPATH=>Title
    (всё зависит от структуры приложения)
    Ответ написан
    Комментировать