- PVSM.RU - https://www.pvsm.ru -

Тяжело выбрать, имея так много опций.
React стал open-source проектом в 2013. С тех пор он очень развился. Поискав в интернете, вы можете найти старые посты с разными подходами. Здесь я опишу восемь ключевых решений которые ваша команда должна поддерживать, когда пишут на React.
Перед тем как вы напишете свой первый компонент, вашей команде необходимо согласовать среду разработки. Есть множество вариантов.

Каким инструментом вы обычно пользуетесь при разработке на React?
Конечно, все можно сделать с нуля [1]. 25% разработчиков на React делают именно так. Моя команда использует связку create-react-app с дополнительными функциями, такими как Mock-API, которое поддерживает CRUD [2], библиотека многократного использования компонентов [3] и с улучшенным линтером.
Лично мне нравится create-react-app, однако здесь вы можете выбрать бойлерплейт, подходящий именно под ваши запросы по множеству критериев [4]. Нужен серверный рендер? Посмотрите Gatsby [5] или Next.js [6]. Вы даже можете рассмотреть возможность использования онлайн-редактора, такого как CodeSandbox [7].
Вы можете игнорировать типы, использовать PropTypes [8], Flow [9] или TypeScript [10]. Обратите внимание, что начиная с React 15.5 PropTypes находится в отдельной библиотеке [11], поэтому старые посты на эту тему больше не актуальны.
Сообщество разделяется в этой теме:

Для соблюдения типов в React, я обычно использую…
Я предпочитаю PropTypes, потому что я считаю, что он обеспечивает достаточную безопасность типов в компонентах React. Используя комбинацию тестов Babel, Jest tests [12], ESLint [13], и PropTypes, я редко вижу проблемы типа времени выполнения.
React.createClass был отдельным API, но в 15.5, он устарел. Некоторые считают, что мы слишком забежали вперед к ES классам [14]. Несмотря на это, функция createClass была удалена из React’a и отнесена к одной главе под названием “React без ES6” [15] в документации React. И так ясно: ES классы это будущие. Вы можете легко конвертировать код из createClass в ES классы, используя react-codemod [16].
Вы можете объявить компоненты React’a через классы или функции. Классы полезны, когда вам нужны ссылки или lifecycle-методы. Вот 9 причин, чтобы использовать функции [17], когда это возможно. Но, также, стоит отметить, что у функциональных компонентов есть свои недостатки.
Вы можете использовать стандартный реактовский стейт. Этого достаточно. Для масштабирования можно использовать lifting state [18]. Или вы можете наслаждаться Redux или MobX.

Пожалуйста без споров — честно интересно, что React сообщество использует в эти дни. Для новых React проектов я использую ...
Мне нравится Redux [19], но я часто использую стандартный стейт React, когда это возможно. На данный момент мы выпустили кучу React приложений, и решили что Redux худший выбор. Я предпочитаю делать много маленьких автономных приложений поверх одного большого приложения.
На заметку, если вы интересуетесь неизменяемыми структурами, тут вы можете посмотреть 4 способа сделать состояния неизменяемыми [20].
Существуют несколько способов биндинга [21] функций в React-компонентах. Современный JS предлагает достаточно способов для биндинга. Вы можете биндить функции в конструкторе, в рендере, использовать функцию в рендере, использовать свойства классов или декораторы. Посмотрите комментарии [21] в этом посте, чтобы увидеть больше возможностей. Каждый подход имеет свои достоинства, возможно, вам нравится использовать экспериментальные возможности языка, лично я предлагаю использовать свойства классов [21].
Этот опрос был в августе 2016. С тех пор свойства классов стали популярны, а createClass упал в популярности.

Замечание: Многие в замешательстве от того, почему стрелочные функции и биндинг функции при рендере вызывают проблемы. Реальная причина? Это делает shouldComponentUpdate и PureComponent капризными [22].
Вот где вариантов действительно много. Существует 50+ подходов для написания стилей к вашим React-компонентам включая традиционный CSS, Sass/Less, CSS-модули [23] и 56 CSS-in-JS [24] опций. Без шуток. Я провел статистику [3] и вот что получилось:

Красный это плохо. Зеленый это хорошо. Серый это опасно.
Посмотрите почему так много пунктов в опциях стилизации. Тут нет явного победителя.
Как вы стилизируете ваше #reactjs приложения(ответьте конкретной библиотекой)?

Видно как CSS-in-JS набирает обороты. Css-модули теряют обороты.
Моя команда использует Sass с BEM и мы этим довольны, но мне также нравятся styled-компоненты [25].
В React существуют так называемые миксины [26] — механизм для многократного использования кода. Однако в настоящие время использовать миксины не рекомендуется [27]. Вы не можете использовать миксины с компонентами ES классов, из-за этого люди используют компоненты высшего порядка [28] и render-props [29] (a.k.a. функция как потомок) для наследования кода между компонентами.

Опрос для разработчиков пишуших на #ReactJS: Что вы предпочитаете?
Компоненты высшего порядка более популярны сейчас, но я предпочитаю render-props с тех пор, как они стали проще для чтения и создания.
Вот еще несколько решений:
А так как React — это всего лишь Javascript, вы можете использовать длинный список из опций JS такие как: точки с запятой [35], запятые, форматирование и именование обработчика событий.
В конце концов, существует десятки комбинаций которые вы можете увидеть в интернете.
Эти шаги являются ключевыми:
Я веду курсы по React и JavaScript [39] на Pluralsight (free trial [40]).

Cory House является автором курсов по JavaScript, React, .NET [41]и пр., главным консульнтантом на reactjsconsulting.com [42]. Готовит разработчиков на международном уровне. В своем твиттере пишет о JavaScript и front-end разработке @housecor [43].
Перевод: Вячеслав Букатов
Читать еще:
Автор: MagisterLudi
Источник [55]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/javascript/265960
Ссылки в тексте:
[1] все можно сделать с нуля: https://www.pluralsight.com/courses/javascript-development-environment
[2] Mock-API, которое поддерживает CRUD: https://medium.freecodecamp.org/rapid-development-via-mock-apis-e559087be066
[3] библиотека многократного использования компонентов: https://www.pluralsight.com/courses/react-creating-reusable-components
[4] выбрать бойлерплейт, подходящий именно под ваши запросы по множеству критериев: http://andrewhfarmer.com/starter-project/
[5] Gatsby: https://www.gatsbyjs.org/
[6] Next.js: https://github.com/zeit/next.js/
[7] CodeSandbox: https://codesandbox.io/
[8] PropTypes: https://reactjs.org/docs/typechecking-with-proptypes.html
[9] Flow: https://flow.org/
[10] TypeScript: https://www.typescriptlang.org/
[11] отдельной библиотеке: https://www.npmjs.com/package/prop-types
[12] Jest tests: https://facebook.github.io/jest/
[13] ESLint: http://www.eslint.org/
[14] забежали вперед к ES классам: https://medium.com/dailyjs/we-jumped-the-gun-moving-react-components-to-es2015-class-syntax-2b2bb6f35cb3
[15] под названием “React без ES6”: https://reactjs.org/docs/react-without-es6.html
[16] react-codemod: https://github.com/reactjs/react-codemod
[17] 9 причин, чтобы использовать функции: https://hackernoon.com/react-stateless-functional-components-nine-wins-you-might-have-overlooked-997b0d933dbc
[18] lifting state: https://reactjs.org/docs/lifting-state-up.html
[19] Мне нравится Redux: https://www.pluralsight.com/courses/react-redux-react-router-es6
[20] 4 способа сделать состояния неизменяемыми: https://medium.com/@housecor/handling-state-in-react-four-immutable-approaches-to-consider-d1f5c00249d5
[21] Существуют несколько способов биндинга: https://medium.freecodecamp.org/react-binding-patterns-5-approaches-for-handling-this-92c651b5af56
[22] shouldComponentUpdate и PureComponent капризными: https://medium.freecodecamp.org/why-arrow-functions-and-bind-in-reacts-render-are-problematic-f1c08b060e36
[23] CSS-модули: https://github.com/css-modules/css-modules
[24] 56 CSS-in-JS: https://github.com/MicheleBertoli/css-in-js
[25] styled-компоненты: https://www.styled-components.com/
[26] миксины: https://reactjs.org/docs/react-without-es6.html#mixins
[27] не рекомендуется: https://reactjs.org/blog/2016/07/13/mixins-considered-harmful.html
[28] компоненты высшего порядка: https://reactjs.org/docs/higher-order-components.html
[29] render-props: https://cdb.reacttraining.com/use-a-render-prop-50de598f11ce
[30] использовать .js или .jsx: https://github.com/facebookincubator/create-react-app/issues/87#issuecomment-234627904
[31] каждый компонент в свою собственную папку: https://medium.com/styled-components/component-folder-pattern-ee42df37ec68
[32] статические свойства: https://michalzalecki.com/react-components-and-class-properties/#static-fields
[33] Объявите propTypes так глубоко, как это возможно: https://iamakulov.com/notes/deep-proptypes/?utm_content=buffer57abf&utm_medium=social&utm_source=twitter.com&utm_campaign=buffer
[34] синтаксисом для инициализации свойств: http://stackoverflow.com/questions/35662932/react-constructor-es6-vs-es7
[35] точки с запятой: https://eslint.org/docs/rules/semi
[36] ESLing: https://eslint.org/
[37] eslint-plugin-react: https://github.com/yannickcr/eslint-plugin-react
[38] prettier: https://github.com/prettier/prettier
[39] курсы по React и JavaScript: http://bit.ly/psauthorpageimmutablepost
[40] free trial: http://bit.ly/pstrialimmutablepost
[41] курсов по JavaScript, React, .NET : http://pluralsight.com/author/cory-house
[42] reactjsconsulting.com: http://www.reactjsconsulting.com/
[43] @housecor: http://www.twitter.com/housecor
[44] EDISON Software: https://www.edsd.ru/
[45] разрабатывали клиентскую часть GameStars для игры «League of Legends»: https://www.edsd.ru/razrabotka-prilozhenij-i-sajtov-na-net-i-c#turniry-v-kibersporte
[46] разрабатывали компонент отображения объектов на трехмерной карте на движке Unity: https://www.edsd.ru/razrabotka-prilozhenij-i-sajtov-na-net-i-c#trekhmernaya-karta
[47] который анализирует около 200 интернет-магазинов: https://www.edsd.ru/razrabotka-sajtov-i-prilozhenij-na-python#monitoring-cen-na-tovary-v-magazinah-konkurentov
[48] Как усилить команду дизайнеров при помощи толкового писателя: https://habrahabr.ru/company/edison/blog/339362/
[49] Переосмысление drag&drop: https://habrahabr.ru/company/edison/blog/339086/
[50] Как конструировать слова (от автора, который ненавидит читать): https://habrahabr.ru/company/edison/blog/317698/
[51] Опасности очаровашек в дизайне: https://habrahabr.ru/company/edison/blog/316574/
[52] Как же вы задолбали со своими оповещениями: https://habrahabr.ru/company/edison/blog/315790/
[53] С маленькой или с Большой: https://habrahabr.ru/company/edison/blog/315360/
[54] Интерфейсы: Мой, твой, ваш, наш или этот: https://habrahabr.ru/company/edison/blog/315140/
[55] Источник: https://habrahabr.ru/post/340264/
Нажмите здесь для печати.