Я сталкиваюсь с проблемой рендеринга, когда передаю несколько стилей, например:
<StyledComponent style={[styles.styleOne, styles.styleTwo]} />
Если компонент StyledComponent содержится в повторных визуализациях, StyledComponent также выполнит повторную визуализацию, даже если реквизиты не изменятся.
Мне известно, что если родительский компонент вызывает setState, то его дочерние элементы будут повторно визуализироваться независимо от того, действительно ли изменяются собственные реквизиты дочерних элементов. Я пытался использовать PureComponent и React.memo. Тем не менее, мои дочерние компоненты все еще перерисовываются. Кажется, проблема в том, как я отправляю стили. Если я передам один стиль так:
<StyledComponent style={styles.styleOne} />
PureComponent / React.memo работает. Однако, если мой компонент имеет такой стиль:
<StyledComponent style={[styles.styleOne, styles.styleTwo]} />
тогда он каждый раз рендерится.
Это потому, что я создаю новый массив для каждого рендера родительского компонента, и PureComponent / React.memo не может определить, что это те же стили.
Итак, мой вопрос: как я могу использовать несколько стилей для компонента, не прибегая к написанию пользовательского shouldComponentUpdate для каждого из моих дочерних компонентов? Рендеринг заметно замедляет производительность моего приложения, так как я работаю со старыми устройствами Android, поэтому я хотел бы свести к минимуму необходимый рендеринг.
Вот закуска, демонстрирующая это:
https://snack.expo.io/@tnortman/styles-r-stupid