Вы просто это условие переносите в инициализацию стейта или конструктор если вам нужны пропсы.
Дублировать как раз ничего и не нужно будет в этом случае.
Если компонент очень тяжелый (например, таблица с 5к строками) и рендериться очень много времени, вы сможете сэкономить 50% времени от начального рендеринга, а это может быть очень не мало.
Это ж в какой вселенной наличие слова чистый подразумевает отсылку к чистым функциям?
Если у меня есть чистая тарелка то что она должна быть детерминирована?
Простите, но не совсем понял при чем здесь чистая тарелка. Я пытаюсь объяснить, что именно я подразумеваю под понятием PureComponent. Это лично мое определение.
И в библиотеке recompose есть HOC который называется pure и делает компонент pure, что как бы наталкивает на мысль, что обычный функциональный компонент не является pure.
Я не использовал библиотеку recompose в продакшене, но читал пару статей про нее. Не понимаю, при чем здесь данная библиотека и мое определение чистого компонента.
const — это константа. То есть переменная, которой значение можно присвоить только один раз.
let — это переменная, которой значение можно присвоить несколько раз.
В сети есть очень много бенчмарков которые показывают сравнение производетельности let, const и var.
Так же рекомендую отличную статью от Эрика
Мои личные рекомендации — использовать только const кроме тех редких случаев когда вам действительно нужна мутация данных (поможет в этом let).
Airbnb, в целом, сделала большую работу по агригации полезных eslint правил, но я предпочитаю, более строгие варианты в некоторых местах. Исключительно для улучшения чтения кода и дальнейшего его поддерживания.
Кажется все перечисленные правила есть тут, и детектируемы линтерами.
Все верно, но я ставил своей целью не только дать ссылки на эти правила, но и объяснить почему их необходимо выполнять. Надеюсь у меня получилось.
К сожалению, документация по Реакту уже довольно давно не поспевает, так сказать, за прогрессом и некоторые моменты там немного устарели. Про bind чуть ниже написано пару хороших комментариев. Рекомендую почитать. По поводу прототипирования в реакте первый раз услышал от вас. Используйте композицию вместо наследования (вольный перевод высказывания Gang of Four).
Не нашел в статье под пунктом три ничего критического для себя, что бы заставило меня не использовать стрелочные функции в компонентах. Ключевое слово static безусловно полезно. Я обычно использую его для propTypes внутри компонента, как и описывал автор.
Про componentDidMount ответил выше. Если в кратце, то вы вызовите еще одни ре-рендер. И я предлогаю использовать для вещей которые нужно менять в componentDidMount переменные класса.
Про componentDidMount ответил выше. Если в кратце, то вы вызовите еще одни ре-рендер. И я предлогаю использовать для вещей которые нужно менять в componentDidMount переменные класса.
Про componentDidMount ответил выше. Если в кратце, то вы вызовите еще одни ре-рендер. И я предлогаю использовать для вещей которые нужно менять в componentDidMount переменные класса.
ImmutableJs работает быстрее с данными, чем аналогичные структуры из JS (Map, List). Буквально недавно делал бенчмарки по map функции. Если интересно, можете поискать результаты.
Поискал сейчас специально, но к сожалению, не нашел официального определения stateless компонентов и pure components. Если попытаться перевести дословно, то stateless значит без стейта, без состояния, что в целом верно описывает компонент. pure component же можно попробовать перевести как чистый компонент, что подразумевает отсылку к чистым функциям из функционального программирования.
Что же такое чистая функция? Wiki
Вики говорит, что фунция чистая если:
является детерминированной;
не обладает побочными эффектами;
В нашем случае компонент всегда будет возвращать один и тот же результат, на одни и теже входящие данные — то есть он является детерменированным. А так же не обладает побочными эффектами.
Суммирую, думаю, что мы можем назвать данный компонент чистым.
Спасибо за дополнение. При изменении стейта componentDidMount можно вызвать перерендер компонента еще один раз. Если вам нужно поменять стейт после перерендера, возможно, стоит вынести эту переменную как переменную класса:
class MyComponent extends React.Component {
state = {
varThatAffectRender: true,
}
varThatNotAffectRender = true;
}
Спасибо. Я имел в виду именно этот вызов bind. Хотя в других местах я его тоже не очень люблю. По большей части из-за проблемы описанной dagen чуть выше.
Вы просто это условие переносите в инициализацию стейта или конструктор если вам нужны пропсы.
Дублировать как раз ничего и не нужно будет в этом случае.
Если компонент очень тяжелый (например, таблица с 5к строками) и рендериться очень много времени, вы сможете сэкономить 50% времени от начального рендеринга, а это может быть очень не мало.
Простите, но не совсем понял при чем здесь чистая тарелка. Я пытаюсь объяснить, что именно я подразумеваю под понятием PureComponent. Это лично мое определение.
Я не использовал библиотеку recompose в продакшене, но читал пару статей про нее. Не понимаю, при чем здесь данная библиотека и мое определение чистого компонента.
Нет. Я имею ввиду:
const — это константа. То есть переменная, которой значение можно присвоить только один раз.
let — это переменная, которой значение можно присвоить несколько раз.
В сети есть очень много бенчмарков которые показывают сравнение производетельности let, const и var.
Так же рекомендую отличную статью от Эрика
Мои личные рекомендации — использовать только const кроме тех редких случаев когда вам действительно нужна мутация данных (поможет в этом let).
Все верно, но я ставил своей целью не только дать ссылки на эти правила, но и объяснить почему их необходимо выполнять. Надеюсь у меня получилось.
https://github.com/facebook/immutable-js/wiki/Immutable-as-React-state
По поводу state вы правы. Здесь будет верно:
К сожалению, документация по Реакту уже довольно давно не поспевает, так сказать, за прогрессом и некоторые моменты там немного устарели. Про bind чуть ниже написано пару хороших комментариев. Рекомендую почитать. По поводу прототипирования в реакте первый раз услышал от вас. Используйте композицию вместо наследования (вольный перевод высказывания Gang of Four).
Не нашел в статье под пунктом три ничего критического для себя, что бы заставило меня не использовать стрелочные функции в компонентах. Ключевое слово static безусловно полезно. Я обычно использую его для propTypes внутри компонента, как и описывал автор.
Про componentDidMount ответил выше. Если в кратце, то вы вызовите еще одни ре-рендер. И я предлогаю использовать для вещей которые нужно менять в componentDidMount переменные класса.
Про componentDidMount ответил выше. Если в кратце, то вы вызовите еще одни ре-рендер. И я предлогаю использовать для вещей которые нужно менять в componentDidMount переменные класса.
Про componentDidMount ответил выше. Если в кратце, то вы вызовите еще одни ре-рендер. И я предлогаю использовать для вещей которые нужно менять в componentDidMount переменные класса.
ImmutableJs работает быстрее с данными, чем аналогичные структуры из JS (Map, List). Буквально недавно делал бенчмарки по map функции. Если интересно, можете поискать результаты.
Поискал сейчас специально, но к сожалению, не нашел официального определения stateless компонентов и pure components. Если попытаться перевести дословно, то stateless значит без стейта, без состояния, что в целом верно описывает компонент. pure component же можно попробовать перевести как чистый компонент, что подразумевает отсылку к чистым функциям из функционального программирования.
Что же такое чистая функция? Wiki
Вики говорит, что фунция чистая если:
В нашем случае компонент всегда будет возвращать один и тот же результат, на одни и теже входящие данные — то есть он является детерменированным. А так же не обладает побочными эффектами.
Суммирую, думаю, что мы можем назвать данный компонент чистым.
Полностью согласен.
Спасибо за дополнение. При изменении стейта componentDidMount можно вызвать перерендер компонента еще один раз. Если вам нужно поменять стейт после перерендера, возможно, стоит вынести эту переменную как переменную класса: