@Ostic
Программист - любитель

В чем разница между FC, Styled, Class компонентами в React?

Здравствуйте.
В чем разница между FC(func component), lFC(lambdaFC), Styled(styled``), Class-base(class ext React.C) компонентами в React?
Создаю компоненты разными способами и потом вывожу в консоль:
Способ 1 (lambdaFC):
spoiler
const lFC = ()=>{
 return (
 	<div>I'm lFC</div>
 )
}

результат
lFC =  () => {
  return React.createElement(
    'div',
    null,
    'I\'m lFC'
  );
}
Способ 2 (FC):
spoiler
function FC(){
 return(
 	<div>I'm FC</div>
 )
}

результат
FC =  ƒ FC() {
  return React.createElement(
    'div',
    null,
    'I\'m FC'
  );
}
Способ 3 (Class):
spoiler
class CC extends React.Component {
componentDidMount(){
	alert(hi)
}
  render() {
    return (
    <div>I'm CC</div>
    )
  }
}

результат
CC =  class CC extends React.Component {
  componentDidMount() {
    alert(hi);
  }
  render() {
    return React.createElement(
      'div',
      null,
      'I\'m CC'
    );
  }
}
Способ 4 (Styled):
spoiler
STYLED =  
> {$$typeof: Symbol(react.forward_ref), render: ƒ, attrs: Array(0), componentStyle: ComponentStyle, displayName: "comp__StyledDiv", …}

Получается:
spoiler
А. Разницы между 1 и 2 нет
Б. Использование Styled внутри функциональных компонентов overhead. Но тогда как использовать темы? А ведь хотелось бы по максимуму "упростить" приложение c использованием FC, те использовать React - View, Redux - Controller, Store - Model
  • Вопрос задан
  • 639 просмотров
Решения вопроса 1
rockon404
@rockon404 Куратор тега React
Frontend Developer
У вас бессмысленное сравнение получилось. Все, что можно вынести из этого способа, это то, что экземпляры компонентов создаются вызовом React.createElement. Но это есть в документации.
Классовые компоненты имеют методы жизненного цикла, состояние и возможность работы с контекстом. Функциональные компоненты достигают подобного функционала при использовании Hooks API.

Использование StyledComponent в функциональных компонентах не overhead. Это просто обертки над вашими компонентами. В консоли вы видите результат вызова React.forwardRef. Вызов нужен для того, чтобы передать оборачиваемому компоненту ref как свойство, иначе при попытке получить ref вы бы получили компонент обертку.

По-максимуму простые приложения это обычно Todo листы и прочие HelloWorldApp. Реально приложение скорей всего будет в разы сложней.

FLUX это не совсем MVC.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы