DevGang
Авторизоваться

Высокоуровневое разделение представления и логики в React

Одна из самых сильных сторон React заключается в возможности отделения представлениея от логики.  Пусть это и требует дополнительного времени, но мне нравится создавать два отдельных компонента, один скрывающий вид, другой - логику.

На первый взгляд может показаться, что это какой то оверхэд. Зачем мне создавать два файла, когда я могу просто использовать метод render. Почему нет, этот подход имеет много преимуществ. К примеру, это позволяет двум людям работать над одним кодом одновременно. Джуниор разработчик может писать стили и разметку JSX, в то время как более опытный разработчик может реализовать обработку логики. Так же еще одним рабочим решением будет разделение интересов. Весь представление можно изменять и модифицировать абстраггированно файлов с логикой, если они используют одинаковые реквизиты.

Итак, как же мы это реализуем? Просто, правда.

Во-первых, я определяю состояние. Компонент должен, например, реагировать на наведение мыши, различать его состояние между активным и бездействующим и отображать переданный ему текст. Далее я перехожу к логике. Чаще всего это класс с некоторыми внутренними методами:

import View from "@src/ui/Thing";class Thing extends React.Component {
 state = {
   active: false,
   hovered: false,
 }; setActiveState = () => this.setState({ active: !this.state.active }); 
setHoveredState = () => this.setState({ hovered: !this.state.hovered });
 render() {
   return (
     
   );
 }
}

Довольно много получилоcь кода для логики. Конечно, может быть гораздо больше, но для примера нам этого будет достаточно.

Далее займемся представлением:

const Thing = (props) => {
 const {
   active,
   hovered,
   onClick,
   onMouseEnter,
   onMouseLeave,
   text,
 } = props; return (
   
{text}
); };

Довольно просто и лаконично.

Этот шаблон отлично работает в командах с младшими и средними разработчиками, так как они могут работать над общим проектом и младшие не будут оставаться позади из-за недостатка знаний в более сложных логических вопросах или из-за отсутствия интереса к написанию представлений.

#JavaScript
Комментарии
Чтобы оставить комментарий, необходимо авторизоваться

Присоединяйся в тусовку

В этом месте могла бы быть ваша реклама

Разместить рекламу