• Как запретить ввод букв в инпут?

    aliencash
    @aliencash
    Партизан
    В принципе вам уже ответили, но вдруг кто у кого нет jq в проекте
    <input type="text" onkeyup="this.value = this.value.replace(/[^\d]/g,'');">
    Ответ написан
    1 комментарий
  • Стоит ли переходить на 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 комментарий
  • Как используя addEventListener передать параметр в функцию?

    @uroot
    Немного дополню спустя 3 года... В ES6 можно так:

    element.addEventListener('click', () => someFunk(param))
    Ответ написан
    7 комментариев
  • Вопрос про миксы БЭМ?

    delphinpro
    @delphinpro
    frontend developer
    Блок - универсален и независим (в идеале). Он может располагаться в любом месте сайта без ущерба для собственного вида. Поэтому блокам не задаются стили, влияющие на позиционирование.
    Элемент - неотъемлемая часть блока, не существующая вне его. Поэтому элементу можно задать позиционирование в пределах своего блока.
    Микс решает проблему позиционирования блока. В данном случае нам нужно задать расположение блока поиска. Но блоку мы не можем задать width, left и т.п. Поэтому делаем этот же блок элементом другого (внешнего) блока и уже как элемент позиционируем.

    Почему не модификатор? Потому что
    Модификаторами в БЭМ задают блокам внешний вид, состояние и поведение.

    Позиционирование не относится ни к одному из этих вариантов.

    Обо всем этом написано https://ru.bem.info/methodology/css/ в разделах "Модификаторы" и "Внешняя геометрия и позиционирование"

    UPD
    Пожалуй стоит дополнить, что все вышенаписанное, как должно быть понятно, относится именно к позиционированию. Если вы миксуете какие-то стили, которые "задают блокам внешний вид, состояние и поведение", то тут вполне возможно использование модификатора.
    Ответ написан
    4 комментария
  • Что такое aria и role атрибуты?

    @senselessV7
    ...
    Допустим, при взаимодействии с насыщенным интернет-приложением (в терминологии ARIA такие приложения именуются активными) пользователь не просматривает страницу, а прослушивает ее с использованием экранного диктора. При этом программа зачитывает вслух одну часть страницы, а тем временем другая ее часть динамически обновляется. Живые области ARIA подсказывают пользователю, что обновилась часть страницы — та, которая в данный момент находится не в фокусе ...

    ...
    Существуют атрибуты состояния ariadisabled, aria-busy, aria-expanded, aria-hidden и атрибуты свойств, в частности ariadescribedby, aria-haspopup и aria-labelledby, предоставляющие дополнительную информацию о переопределенных элементах. На практике рекомендуется макси-
    мально полагаться на семантические элементы, но если вам непременно требуется использовать конкретный элемент (допустим, древовидное меню) «не по назначению» — прибегайте к ARIA-атрибутам. ...


    Эстель Вейл "Разработка приложений для мобильных устройств"
    Глава 6


    Почитайте, вполне интересно и полезно!
    Ответ написан
    1 комментарий
  • Не срабатывает gulp.watch. Что не так?

    @coderxx
    keep calm and learn js
    Ошибка в том, что у вас, вероятно, установлен Gulp версии 4, использующий функцию gulp.parallel, в то время как данная конфигурация галпфайла предназначена для Gulp версии 3. Самый простой выход - откатить версию Gulp до 3.9.1, либо исправить gulpfile.js:
    gulp.task("watch", function() {
      gulp.watch('app/sass/main.sass', gulp.parallel('sass'));
    });
    Ответ написан
    3 комментария
  • Как сделать, чтобы фон был шире контейнера?

    carlcox
    @carlcox
    Fullstack developer
    <body>
     <div class="bg1">
      <div class="container">TEKST </div>
     </div>
     <div class="bg2">
      <div class="container">TEKST </div>
     </div>
     <div class="bg3">
      <div class="container">TEKST </div>
     </div>
    </body>

    .bg1{width: 100%; background: url(1.jpg)}
    .bg2{width: 100%; background: url(2.jpg)}
    .bg3{width: 100%; background: url(3.jpg)}
    .container{max-width: 1170px}
    Ответ написан
    1 комментарий
  • Как сделать, чтобы ширина div зависела от содержимого?

    @Lici
    display: inline-block;

    всего то ;)
    Ответ написан
    Комментировать
  • Как сделать li ссылкой?

    kn1ght_t
    @kn1ght_t
    a {
        display:block;
    }
    Ответ написан
    Комментировать
  • Как правильно использовать margin: 0 auto;?

    jurasarts
    @jurasarts
    Этот прием не работает, если элемент не блочный или у него не указана ширина.
    Ответ написан
    1 комментарий