<?xml version="1.0" encoding="utf-8" ?><rss version="2.0" xmlns:tt="http://teletype.in/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:media="http://search.yahoo.com/mrss/"><channel><title>Archakov Dennis</title><generator>teletype.in</generator><description><![CDATA[Archakov Dennis]]></description><image><url>https://teletype.in/files/f1/f0/f1f00681-d9a4-491b-8c49-edf4ee778e51.png</url><title>Archakov Dennis</title><link>https://teletype.in/@archakov</link></image><link>https://teletype.in/@archakov?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=archakov</link><atom:link rel="self" type="application/rss+xml" href="https://teletype.in/rss/archakov?offset=0"></atom:link><atom:link rel="next" type="application/rss+xml" href="https://teletype.in/rss/archakov?offset=10"></atom:link><atom:link rel="search" type="application/opensearchdescription+xml" title="Teletype" href="https://teletype.in/opensearch.xml"></atom:link><pubDate>Wed, 15 Apr 2026 17:06:06 GMT</pubDate><lastBuildDate>Wed, 15 Apr 2026 17:06:06 GMT</lastBuildDate><item><guid isPermaLink="true">https://teletype.in/@archakov/LQV8ByNUD</guid><link>https://teletype.in/@archakov/LQV8ByNUD?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=archakov</link><comments>https://teletype.in/@archakov/LQV8ByNUD?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=archakov#comments</comments><dc:creator>archakov</dc:creator><title>Когда необходимо использовать React.memo и PureComponent?</title><pubDate>Sun, 28 Mar 2021 10:36:48 GMT</pubDate><media:content medium="image" url="https://teletype.in/files/b8/88/b8886760-0b6f-4372-ae24-3266a47ce6f8.png"></media:content><description><![CDATA[<img src="https://teletype.in/files/32/18/32184c81-70fe-4365-9022-b54a7fcda56a.png"></img>Когда у вас возникнет сомнение, достаточно ли хорошо вы оптимизировали ререндер компонентов с помощью React.memo() или shouldComponentUpdate, просто помните, что Instagram плевал на ваши реакт мемы и прочие способы оптимизации ререндера (см. на рисунок статьи).]]></description><content:encoded><![CDATA[
  <figure class="m_original">
    <img src="https://teletype.in/files/32/18/32184c81-70fe-4365-9022-b54a7fcda56a.png" width="1015" />
  </figure>
  <p>Когда у вас возникнет сомнение, достаточно ли хорошо вы оптимизировали ререндер компонентов с помощью React.memo() или shouldComponentUpdate, просто помните, что Instagram плевал на ваши реакт мемы и прочие способы оптимизации ререндера (см. на рисунок статьи).</p>
  <p>Все эти зелёные квадратики - <strong>компоненты</strong>, которые делают ререндер при нажатии на логотип инстаграма и даже при сужении окна.</p>
  <p>Один из &quot;страшных&quot; снов реакт-разработчика - бесполезный ререндер компонента. Разработчик неистово пытается бороться с этой  &quot;проблемой&quot;, оборачивая с помощью React.memo() или PureComponent (shouldComponentUpdate), в надежде на то, что компонент перестанет делать ререндр, когда этого не требуется.</p>
  <p>Согласен, делать перерисовку компонента даже тогда, когда в нём ничего не изменилось, не очень то и здорово, но и ничего страшного в этом нет 🤷🏻‍♂️</p>
  <p>Даже если ничего не изменилось (просы, стейт), а вызов на ререндер у компонента всё равно произошёл, React не будет перерисовывать что-то в DOM-дереве, <a href="https://ru.reactjs.org/docs/rendering-elements.html#react-only-updates-whats-necessary" target="_blank">если VDOM не даст на это добро</a>. </p>
  <p>Дорогостоящей операцией в React является <strong>не повторный вызов компонента</strong>, а <strong>изменение чего-то в DOM-дереве</strong>.</p>
  <p>В качестве примера, я сделал <a href="https://stackblitz.com/edit/react-5h34zs?file=src%252FApp.js" target="_blank">очень простую демку</a>.</p>
  <p>Если в компоненте &quot;<strong>А</strong>&quot; нажать на &quot;+&quot;, перерисовку будут делать компонент &quot;<strong>B</strong>&quot; и &quot;<strong>C</strong>&quot;, так как родительский компонент &quot;<strong>А</strong>&quot; был повторно вызов из-за изменения счётчика. В консоли вы увидите сообщение при каждом повторном рендере.</p>
  <p>Но если компонент &quot;<strong>C</strong>&quot; обернуть с помощью <strong>React.memo</strong>, то в консоли не будет сообщение о том, что данный компонент сделал ререндер, даже если счётчик обновился.</p>
  <p>Выглядит круто, не правда ли? Мы ведь избавились от лишнего ререндера! Ноооо </p>
  <figure class="m_custom">
    <img src="https://teletype.in/files/9d/c2/9dc2f19d-61c8-43fe-b541-1a94071c7bf9.png" width="600" />
  </figure>
  <p>Обернув компонент &quot;<strong>С</strong>&quot; с помощью React.memo, мы не решили никакую проблему, а наоборот, добавили лишнюю логику, которая будет выполняться при каждом вызове компонента &quot;<strong>С</strong>&quot;. </p>
  <p>То есть, при изменении счётчика в компоненте &quot;<strong>А</strong>&quot;, компонент &quot;<strong>С</strong>&quot; будет вызываться всё равно, но теперь ещё с дополнительной логикой проверки, которая ему в принципе была не нужна, так как он просто отображает какую-то вёрстку.</p>
  <p>React.memo или PureComponent необходимо использовать только в том случае, если вы реально столкнулись с проблемой, которая заставляет тормозить ваш UI или выполняет лишнюю логику.</p>
  <p>В <a href="https://ru.reactjs.org/docs/reconciliation.html" target="_blank">этой статьей</a> подробно объясняется, как происходит согласование перерисовки компонентов.</p>

]]></content:encoded></item></channel></rss>