Я вроде нигде не писал что промисы лучше использовать, я только указал что некоторые даже ими не научились пользоваться, но уже пишут статьи, что промисы плодят колбекхел
Статья для 14 реакта, и там видна разница между Component и functional Component она 6-7%
Я взял код оттуда и зделал 16 реакт, тесты показали тот же прирост всего в 6-7%
А вот простой вызов функционального компонента как функции даёт прирост в 60%, что наталкивает на мысль, что там далеко не простой вызов функции, и логики там даже на функциональные компоненты накидывается дочерта.
И никто не мешает мемоизировать функциональный компонент))
import React from 'react';
// любой список или таблица с большим кол-вом данных 10к например
const Table = ({ data }) => (
<table>
{data.map(() => {
// tr td what ever
})}
</table>
);
const Wrapper = ({ searchString, onSearchStringChange, tableData }) => (
<div>
<input value={searchString} onChange={onSearchStringChange} />
{/* любое изменение в input будет вызывать пересчёт Table */}
<Table data={tableData} />
</div>
);
И выйдет так что пользователь вводит слово в input, а он лагает потому что js поток пытается выполнить data.map() и занимает это дочерта.
А если Table чистый компонент, то он не будет даже data.map выполнять потому что массив data не изменился.
А если у нас внутри Table ещё что-то тяжёлое, ещё больше нагрузка и больше лагов.
Простите, но не совсем понял при чем здесь чистая тарелка.
А я не совсем понимаю при чём здесь чистая функция?
что подразумевает отсылку к чистым функциям из функционального программирования.
Каким образом?
Компонент чистый, когда при одних и тех же пропсах не вызывается рендер, и соответственно не происходит просчёт всех компонентов которые находятся ниже.
pure component же можно попробовать перевести как чистый компонент, что подразумевает отсылку к чистым функциям из функционального программирования.
Это ж в какой вселенной наличие слова чистый подразумевает отсылку к чистым функциям?
Если у меня есть чистая тарелка то что она должна быть детерминирована?
В нашем случае компонент всегда будет возвращать один и тот же результат, на одни и теже входящие данные — то есть он является детерменированным. А так же не обладает побочными эффектами.
Суммирую, думаю, что мы можем назвать данный компонент чистым.
Суммируя мы можем назвать этот компонент чистой функцией.
Этот компонент будет pure function и stateless component, но не pure component.
И в библиотеке recompose есть HOC который называется pure и делает компонент pure, что как бы наталкивает на мысль, что обычный функциональный компонент не является pure.
Данное правило описывает больше улучшение вашего кода и приложения, чем ошибку, но я, все же, рекомендую следовать этому правилу. Если ваш компонент не использует state, сделайте его stateless компонентом (мне больше нравиться термин 'pure component'):
class MyComponentWithoutState extends React.Component {
render() {
return <div>I like to write a lot of unneeded code</div>
}
}
const MyPureComponent = (props) => <div>Less code === less support</div>
А ничего что stateless и pure components это совсем разные понятия?
И что функциональные компоненты не являются чистыми?
И использование их без тулов типа recompose просадит производительность?
Можно так делать:
Я взял код оттуда и зделал 16 реакт, тесты показали тот же прирост всего в 6-7%
А вот простой вызов функционального компонента как функции даёт прирост в 60%, что наталкивает на мысль, что там далеко не простой вызов функции, и логики там даже на функциональные компоненты накидывается дочерта.
И никто не мешает мемоизировать функциональный компонент))
И выйдет так что пользователь вводит слово в input, а он лагает потому что js поток пытается выполнить data.map() и занимает это дочерта.
А если Table чистый компонент, то он не будет даже data.map выполнять потому что массив data не изменился.
А если у нас внутри Table ещё что-то тяжёлое, ещё больше нагрузка и больше лагов.
А я не совсем понимаю при чём здесь чистая функция?
Каким образом?
Компонент чистый, когда при одних и тех же пропсах не вызывается рендер, и соответственно не происходит просчёт всех компонентов которые находятся ниже.
Это ж в какой вселенной наличие слова чистый подразумевает отсылку к чистым функциям?
Если у меня есть чистая тарелка то что она должна быть детерминирована?
Суммируя мы можем назвать этот компонент чистой функцией.
Этот компонент будет pure function и stateless component, но не pure component.
И в библиотеке recompose есть HOC который называется pure и делает компонент pure, что как бы наталкивает на мысль, что обычный функциональный компонент не является pure.
А ничего что stateless и pure components это совсем разные понятия?
И что функциональные компоненты не являются чистыми?
И использование их без тулов типа recompose просадит производительность?