{"componentChunkName":"component---src-templates-post-js","path":"/javascript/12-luchih-i-prosih-praktik-v-react-kotorih-stoit-priderzhivatsya-v-2020-godu/","result":{"pageContext":{"slug":"12-luchih-i-prosih-praktik-v-react-kotorih-stoit-priderzhivatsya-v-2020-godu","content":"\n<p id=\"d17a\">В этой статье собраны 12 простых и хороших практик при работе в React, которых стоит придерживаться, имея дело с этой библиотекой в 2020 году.</p>\n\n\n\n<p class=\"author\" id=\"e9ba\"><em>Перевод статьи&nbsp;</em><a href=\"https://www.codeinwp.com/blog/react-best-practices/\"><em>12 React Best Practices You Need to Follow in 2020</em></a></p>\n\n\n\n<p id=\"1e54\">Если вы фронтэнд разработчик, вовлеченный в создание интерактивных пользовательских интерфейсов, то скорее всего вы работаете с React. Имея дело с проектами на этой библиотеке нужно быть крайне осторожным в написании кода таким образом, чтобы следовать лучшим практикам React, которые помогут лучше организовать ваш код.</p>\n\n\n\n<p id=\"2b41\">Как&nbsp;вы уже знаете, React это библиотека созданная в Facebook и она допускает интеграцию в&nbsp;<a href=\"https://www.codeinwp.com/blog/react-ui-component-libraries-frameworks/\">множеством уже готовых и интересных компонентов</a>. По факту, любой разработчик может создать свои собственные компоненты и сделать их доступными для сообщества.</p>\n\n\n\n<p id=\"fe76\">Но сегодня мы заострим внимание на самых основных из лучших практик при работе в React:</p>\n\n\n\n<h2 id=\"b182\">1. Делайте компоненты небольшими и отвечающими за конкретный функционал</h2>\n\n\n\n<p id=\"c576\">Как мы уже все знаем, в React можно создавать большие компоненты, которые будут выполнять несколько задач. Но лучше всего создавать компоненты, оставляя их небольшими, таким образом, чтобы каждый компонент отвечал за конкретный функционал. В идеале компонент должен рендерить конкретную часть вашей страницы или отвечать за определенное поведение. Вот несколько преимуществ такого подхода:</p>\n\n\n\n<p id=\"a9f2\">Такие компоненты существуют сами по себе, что делает их тестирование и поддержку гораздо проще.</p>\n\n\n\n<p id=\"e96d\">Каждый небольшой компонент может быть повторно использован на нескольких проектах.</p>\n\n\n\n<p id=\"1066\">Компоненты выполняющие общие функции можно легко сделать доступными на любого сообщества.</p>\n\n\n\n<p id=\"ba0b\">В небольших компонентах проще делать оптимизацию производительности.</p>\n\n\n\n<p id=\"0e0c\">Такие компоненты проще обновлять.</p>\n\n\n\n<p id=\"0831\">Большие компоненты нагружены в плане производительности и их может быть довольно тяжело поддерживать.</p>\n\n\n\n<p id=\"6ecb\">Баланс между созданием одного сжатого компонента и созданием нескольких, отвечающих только за свой функционал компонентов, может варьироваться от компании к компании. Но все же, вы можете наделать столько компонентов, сколько хотите и комбинировать их таким способом, чтобы достигнуть желаемого результата.</p>\n\n\n\n<h2 id=\"05f8\"><strong>2. Повторное использование это важный момент, старайтесь довести создание новых компонентов до возможного минимума</strong></h2>\n\n\n\n<p id=\"e5e3\">Придерживаясь правила “<em>одна функция = один компонент</em>”, вы можете улучшить повторное использование компонентов. Это означает то, что вам стоит избегать попыток создания новых компонентов для функционала, который уже существует в виде другой, уже готовой функции.</p>\n\n\n\n<p id=\"92cf\">Повторно используя компоненты по всему вашему проекту или по нескольким проектам, вы не только вы обретете связность и логичность в ваших проектах, но это также поможет и другим людям работающим с вашим кодом.</p>\n\n\n\n<p id=\"37a1\">С другой стороны, если любой компонент становится большим, громоздким и сложным в поддержке, то лучше всего разбить его на столько маленьких компонентов, насколько это возможно.</p>\n\n\n\n<p id=\"5b5f\">Для примера, вы можете создать компонент&nbsp;<code>Button</code>, который может принимать только нужные ему иконки. И каждый раз, когда вам понадобится кнопка, у вас уже будет под рукой нужный компонент. Модульный подход позволит вам покрыть множество рабочих моментов, применяя один и тот же кусок кода.&nbsp;<em>Вам нужно стремиться к золотой середине</em>. Компоненты должны быть достаточно абстрактными, но не очень уж загруженными.</p>\n\n\n\n<pre class=\"wp-block-code javascript\"><code>class IconButton extends React.Component {\n  &#91;...]\n  render() {\n    return (\n      &lt;button onClick={this.props.onClick()}>\n        &lt;i class={this.props.iconClass}>&lt;/i>\n      &lt;/button>\n    );\n  }\n}</code></pre>\n\n\n\n<h2 id=\"f9a8\">3. Консолидируйте повторяющийся код — придерживайтесь правила DRY (Don’t Repeat Yourself)</h2>\n\n\n\n<p id=\"6a6c\">Общее правило для написания любого кода — это держать его сжатым и стараться не раздувать по мере возможности.</p>\n\n\n\n<p id=\"e255\">Это собственно и есть одна из лучших практик React.&nbsp;<em>Избегайте дубликатов кода — ну или Don’t Repeat Yourself (DRY).</em></p>\n\n\n\n<p id=\"4660\">Этого можно достичь тщательно изучив код на паттерны и на повторения. Если таковые имеются, то возможно вы повторяете свой код и у вас явно есть место где нужно пресечь такое повторение. Скорее всего, немного переписав код, вы сделаете его более сжатым и оставите таким же понятным.</p>\n\n\n\n<p id=\"c9f9\">Этот момент опирается на принцип повторного использования в React. Давайте представим, что вам нужно добавить несколько кнопок, которые содержат в себе иконки, а вместо добавления разметки для каждой кнопки, вы можете просто применить компонент&nbsp;<code>IconButton</code>, показанный ниже. Вы можете зайти ещё дальше, отобразив все нужные кнопки с помощью массива с уже заготовленными для них данными.</p>\n\n\n\n<pre class=\"wp-block-code javascript\"><code>const buttons = &#91;'facebook', 'twitter', 'youtube'];\n\nreturn (\n  &lt;div>\n    {\n      buttons.map( (button) => {\n        return (\n          &lt;IconButton\n            onClick={doStuff( button )}\n            iconClass={button}\n          />\n        );\n      } )\n    }\n  &lt;/div>\n);</code></pre>\n\n\n\n<h2 id=\"39b0\">4. Добавляйте комментарии только там, где это действительно нужно</h2>\n\n\n\n<p id=\"71df\">И ещё раз, добавляйте их только там, где это действительно нужно. Это касается не только React, таким образом вы убьете сразу двух зайцев:</p>\n\n\n\n<p id=\"2652\"><em>Ваш код визуально будет чист и приведен в порядок.</em></p>\n\n\n\n<p id=\"a6ac\"><em>Вы избежите потенциального конфликта между кодом и комментариями, если вам в будущем понадобится переписать код.</em></p>\n\n\n\n<h2 id=\"785b\">5. Именуйте компоненты в соответствии с их функционалом</h2>\n\n\n\n<p id=\"dbdb\">Это вообще хорошая идея, называть компоненты в соответствии с тем, что они делают, так вам проще будет их распознать в структуре приложения.</p>\n\n\n\n<p id=\"e425\">Ещё один пример, в котором предпочтительнее назвать компонент&nbsp;<code>Avatar</code>, так как он может использоваться везде в приложении — для авторов, пользователей или в комментариях. А вот если мы назовем компонент&nbsp;<code>AuthorAvatar</code>, сугубо в контексте использования, то мы как бы сократим полезность этого компонента до применения только у авторов.</p>\n\n\n\n<p id=\"e6c0\">Ну и более того, именование компонентов в соответствии с их функционалом станет полезными моментом для работы с любой командой или сообществом, сделав этот компонент доступнее в плане поиска.</p>\n\n\n\n<h2 id=\"0148\">6. Называйте компоненты с заглавной буквы</h2>\n\n\n\n<p id=\"c151\">Если вы, как и большинство других, используете JSX, то имена компонентов, создаваемых вами должны начинаться с заглавной буквы. К примеру, вам нужно называть компоненты как&nbsp;<code>SelectButton</code>, а не&nbsp;<code>selectbutton</code>&nbsp;или&nbsp;<code>Menu</code>, а не&nbsp;<code>menu</code>. Это делается для того, чтобы JSX определял их отдельно от стандартных HTML тегов.</p>\n\n\n\n<p id=\"dde7\">В ранних версиях React был список встроенных имён, чтобы различить их от кастомных названий. Но так как такому списку нужна была постоянная поддержка и обновления, этот подход был пересмотрен и заглавные буквы стали нормой.</p>\n\n\n\n<p id=\"cbd5\">Если же JSX не ваш выбор, то вы можете использовать буквы нижнего регистра. Но это может сократить возможность повторного использования компонентов по всему проекту.</p>\n\n\n\n<h2 id=\"64c8\">7. Разделяйте аспекты связанные со сменой стейта от рендеринга</h2>\n\n\n\n<p id=\"aa81\">Компоненты бывают со стейтом и без. Первые могут хранить информацию о стейте компонента и передавать необходимый контекст. А вторые, в свою очередь, не имеют памяти и не могут передавать контекст другим частям пользовательского интерфейса. Они только получают пропсы от родительских компонентов и отдают вам JSX элементы. Они масштабируемы и готовы к повторному использованию, а так же схожи с чистыми функциями в JavaScript.</p>\n\n\n\n<p id=\"a19b\">Одной из лучших практик в React является хранение состояния логики загрузки данных отдельно от рендеринга любой логики без стейта. Лучше всего иметь один компонент со стейтом, чтобы подгружать данные и ещё один компонент, но уже без стейта, чтобы эти данные выводить. Такой подход сократит запутанность среди компонентов.</p>\n\n\n\n<p id=\"128b\">Последние версии React 16.8 имеют на борту новую фичу, а именно хуки. Которые могут в конечном итоге вообще помочь избавиться от компонентов, основанных на классах.</p>\n\n\n\n<p id=\"ad48\">Для примера, ваше приложение подтягивает данные после монтирования. Тут вам нужно управлять данными с основном компоненте и передать комплексный таск на рендер подкомпоннету, но в виде пропса.</p>\n\n\n\n<pre class=\"wp-block-code javascript\"><code>import RenderTable from './RenderTable';\n\nclass Table extends Component {\n  state = { loading: true };\n\n  render() {\n    const { loading, tableData } = this.state;\n    return loading ? &lt;Loading/> : &lt;RenderTable data={tableData}/>;\n  }\n\n  componentDidMount() {\n    fetchTableData().then( tableData => {\n      this.setState( { loading: false, tableData } );\n    } );\n  }\n}</code></pre>\n\n\n\n<h2 id=\"4dd8\">8. Код должен выполняться как и от него ожидается, а также быть готовым к тестированию</h2>\n\n\n\n<p id=\"dbe8\">Ну тут реально, уже не надо никаких объяснений. Ваш код должен вести себя так, как от него и ожидают, а также должен быть готовым к тестированию в любой момент. Хорошей практикой является именование тестовых файлов также, как и исходных файлов, но с суффиксом&nbsp;<code>.test</code>.</p>\n\n\n\n<p id=\"5279\">Вы можете использовать&nbsp;<em>JEST</em>&nbsp;для тестирования вашего кода в React.</p>\n\n\n\n<h2 id=\"0dcd\"><strong>9. Все относящиеся к компоненту файлы должны находиться в одном месте</strong></h2>\n\n\n\n<p id=\"e7f1\">Держите все файлы для одного компонента в одной папке, даже включая файлы стилей.</p>\n\n\n\n<p id=\"a632\">В случае, если маленький компонент используется другим компонентом и только им, то есть смысл хранить такие компоненты вместе, в папке родительского компонента. Такую иерархию потом будет легче понять — большие компоненты имеют свои собственные директории, а все их мелкие части разделены на поддиректории. Таким образом вы можете легко извлечь нужный код в любой другой проект или улучшить его при малейшей надобности.</p>\n\n\n\n<p id=\"b0c2\">Для примера, для компонента&nbsp;<code>Form</code>, все составляющие части, такие как CSS файлы, иконки, изображения, тесты и любые прилегающие компоненты, относящиеся к&nbsp;<code>Form</code>, должны находиться в одной и той же папке. Если вы именуете файлы с умом и держите все относящиеся друг к другу файлы вместе, согласно логическому порядку, то у вас не будет проблем в их последующем поиске.</p>\n\n\n\n<h2 id=\"51e1\">10.&nbsp;<strong>Используйте инструменты, такие как Bit</strong></h2>\n\n\n\n<p id=\"377d\">Одной из лучших практик работы в React, которая поможет вам организовать ваши компоненты, это использование таких инструментов как Bit.</p>\n\n\n\n<p id=\"d24d\">Подобные сервисы помогают поддерживать и переиспользовать код. Более того, они помогают коду быть более доступным и способствуют коллективной разработке компонентов. Также, код может быть легко синхронизирован среди компонентов.</p>\n\n\n\n<h2 id=\"0791\"><strong>11. Библиотеки примеров кода</strong></h2>\n\n\n\n<p id=\"d5fb\">Сниппеты кода помогут вам оставаться на одной волне с лучшим кодом и самым продвинутом синтаксисом. Также они помогают вам относительно избавиться от багов, что делает их одной из лучших практик в React, которые вам явно не стоит пропускать.</p>\n\n\n\n<p id=\"7cf7\">Вообще, существует множество библиотек сниппетов, которые вы можете смело использовать, например ES7 React, Redux, JS Snippets и т.п.</p>\n\n\n\n<h2 id=\"c307\">12. Соблюдайте правила линтинга, разбивайте слишком длинные строки</h2>\n\n\n\n<p id=\"f951\">Линтинг это процесс в котором мы запускаем программу, анализирующую код на потенциальные ошибки.</p>\n\n\n\n<p id=\"27db\">В основном мы используем его для работы с конкретными языками. Но также мы можем фиксить и другие проблемы полностью автоматически, особенно со стилем написания кода. Используя линтер в React, мы делаем наш код относительно свободным от ошибок и багов.</p>\n\n\n\n<h2 id=\"483d\">Последние слова о лучших практиках React</h2>\n\n\n\n<p id=\"cc44\">Я надеюсь, что этот список лучших практик поможет вам правильно наладить работу с вашими проектами и избежать потенциальных проблем.</p>\n","type":"js","date":"2021-02-05T14:49:21.000Z","acf":{"seo_desc":"В этой статье собраны 12 простых и хороших практик при работе в React, которых стоит придерживаться, имея дело с этой библиотекой в 2020 году.","keywords":"практики в React, лучшие практики в React, лучшие подходы в React","pub_date":"2020-02-04","tags":"React, JavaScript, JavaScript советы"},"title":"12 лучших и простых практик в React, которых стоит придерживаться в 2020 году","id":"49bb3e2d-911e-5bc7-8c6e-cebf5ad58b0a","excerpt":"<p>В этой статье собраны 12 простых и хороших практик при работе в React, которых стоит придерживаться, имея дело с этой библиотекой в 2020 году.</p>\n","featured_media":{"source_url":"https://stasonmars.ru/wp/wp-content/uploads/2021/02/reactpractice2020fjs.jpg"},"interesting":[{"title":"Рекурсивно определяем числа Фибоначчи с помощью мемоизации в JavaScript","slug":"recursivno-opredelyaem-chisla-fibonacci-s-pomoshiu-memoizacii-v-javascript","type":"js"},{"title":"15 методов работы с элементами про которые вы возможно не слышали","slug":"15-metodov-raboty-s-elementami-pro-kotorie-vy-ne-slyshaly-vozmozhno","type":"js"},{"title":"Методы JavaScript, которые улучшат ваши умения за несколько минут","slug":"metody-javascript-kotorie-uluchshat-vashi-umenia-za-neskolko-minut","type":"js"}]}},"staticQueryHashes":["3576131997","63159454"]}