• Стоит ли переходить на 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 комментарий
  • Как сделать адаптивный фон-картинку (проблема с высотой при увеличении размера экрана)?

    @Farrien
    Tell me who
    background-size: auto 100%; (не помню первое или второе отвечает за высоту)
    Ответ написан
    Комментировать
  • Смена редактора сообщений коммитов Git под управлением Windows?

    @ilyarsoftware
    Примерно так (консоль Git-bash):
    git config --global core.editor "notepad"
    Подробнее тут stackoverflow.com/a/773973

    Просто открыть файл конфигурации он находится в домашнем каталоге называется: ".gitconfig" отредактировать значение параметра editor в секции core, прописав туда путь нужного редактора.

    Важно учитывать, что могут быть особенности запуска для конкретного редактора.
    Ответ написан
    3 комментария
  • Как в pug создать миксин для вывода товаров однотипных?

    werty1001
    @werty1001
    undefined
    mixin product( data )
    	.product
    		.product__name= data.name
    		.product__cost= data.cost
    
    //- Один
    +product( {name: 'Шоколадка', cost: '3$'} )
    
    //- Несколько
    each item in [{name: 'Шоколадка', cost: '3$'}, {name: 'Мороженка', cost: '1$'}]
    	+product( item )
    Ответ написан
    Комментировать