Полная версия
React и TypeScript: Практическое руководство. Быстрый старт
Пример: у вас есть компонент UserComponent, который отображает имя пользователя:
import React from ’react’const UserComponent = (props) => { returnТеперь вы хотите добавить к этому компоненту возможность загрузки данных о пользователе из сети. Для этого мы можем использовать HOC:
import React, {Component} from ’react’;const withDataFetching = (WrappedComponent) => { return class extends Component { constructor (props) { super (props);this.state = { data: null, loading: true,}} async componentDidMount () { try { const response = await fetch(this.props. url) const data = await response. json ()this.setState ({data, loading: false})} catch (error) {console.error («Ошибка:», error)this.setState ({loading: false})}} render () { return ( <WrappedComponent{…this.props}data={this.state. data}loading={this.state. loading} />)}}}export default withDataFetchingЗдесь мы должны создать HOC withDataFetching, который загружает данные из указанного URL и передает их в обернутый компонент. После этого мы можем использовать его с нашим UserComponent:
import React from ’react’import withDataFetching from». /withDataFetching’const UserComponent = (props) => { return (Email: {props. data. email}
Теперь UserComponent получает данные из сети благодаря HOC withDataFetching
5.5 Заключение
В этой главе мы изучили, как создавать компоненты в React и использовать их в приложениях. Мы освоили, как создавать функциональные компоненты и классовые компоненты, а также как использовать их в составе наших приложений.
Одним из наиболее важных аспектов, который мы рассмотрели, является вложенность компонентов. Мы поняли, как важно правильно структурировать компоненты в иерархии, чтобы сделать наш код чище и более организованным. Вложенность позволяет нам создавать маленькие, переиспользуемые компоненты, которые могут быть объединены в более крупные структуры, создавая мощные и гибкие интерфейсы.
Эта глава была началом нашего путешествия в мире React, и впереди нас ждут еще много интересных тем и возможностей. Мы будем изучать более сложные концепции, такие как управление состоянием, маршрутизация, обработка событий и многое другое. Мы также рассмотрим передовые техники разработки с использованием React и узнаем, как создавать масштабируемые и производительные приложения.
Глава 6. Основы использования props и state
В React props и state – это два основных механизма для управления данными, обновления пользовательского интерфейса и взаимодействия с компонентами. В этой главе мы рассмотрим, как использовать props и state для передачи и управления данными в компонентах React.
6.1 Введение в props и state
Props (сокращение от «properties») представляют собой механизм передачи данных в компоненты React. Они представляют собой входные данные, получаемые компонентом от его родительского компонента. Props передаются компоненту в виде атрибутов и становятся доступными внутри компонента, как свойства.
Важно отметить, что props являются неизменяемыми, что означает, что однажды переданные данные нельзя изменить внутри компонента. Это позволяет передавать инструкции или информацию от родительского компонента к его дочерним компонентам, определяя, как компонент должен себя вести или какие данные отобразить.
Пример: Если у вас есть компонент «Кнопка», то пропс может содержать информацию о том, какой текст должен отображаться на кнопке. Вы передаете этот текст в компонент, и компонент использует его для отображения на кнопке.
Преимущества использования props:
– Расширяемость. Props являются расширяемым и удобным способом передачи данных в компоненты, особенно, когда у вас есть множество разных пропсов. При использовании props вы также можете определить значения по умолчанию и лучше структурировать ваш компонент.
Пример:
function UserProfile (props) { return (Name: {props.name}
Age: {props.age}
{/* Другие свойства */})
}
– Читаемость кода. Передача данных через props делает компонент более читаемым, так как вы видите, какие данные он использует, необходимо только взглянуть на его декларацию.
– Значения по умолчанию: Вы можете задать значения по умолчанию для props, что полезно, если некоторые данные не передаются. Например, если props.age не был передан, вы можете использовать значение по умолчанию.
Пример:
function UserProfile (props) { const age = props.age || 25 // Значение по умолчанию return (Name: {props.name}
Age: {age}
)
}
Хотя слово «props» является стандартным и широко используется в сообществе React, вы можете использовать любое другое слово в качестве аргумента функции компонента. Это полностью зависит от вас и вашего стиля кодирования.
Например, вместо props можно использовать data, parameters, options или любое другое имя, которое вам кажется более подходящим для вашей ситуации. Важно помнить, что выбранное вами имя аргумента будет использоваться для доступа к пропсам внутри компонента, поэтому оно должно быть понятным и соответствовать содержанию.
Пример с использованием другого имени для аргумента:
function PersonInfo (data) { return (Имя: {data.name}
Возраст: {data.age}
)
}
При использовании компонента:
<PersonInfo name=«Алиса» age= {30} />
Стоит помнить, что использование слова «props» для аргумента функции компонента – это стандартная практика в сообществе React, и она делает ваш код более читаемым и понятным для других разработчиков, знакомых с React. Большинство разработчиков ожидают видеть props как стандартное имя для пропсов, и это может упростить совместную работу над проектами.
Конечно, если у вас есть особые обстоятельства или предпочтения, и вы хотите использовать другое имя, вы можете сделать это. Однако это может усложнить совместную работу и понимание вашего кода другими членами команды.
State – это специальный объект внутри компонента, который используется для хранения и отслеживания изменяющихся данных. Стейт позволяет компоненту «запоминать» данные и перерисовывать себя, когда эти данные меняются.
Пример: Если у вас есть компонент «Счетчик», то стейт может содержать текущее значение счетчика. Когда пользователь нажимает на кнопку увеличения счетчика, стейт изменяется, и компонент обновляется, чтобы отобразить новое значение счетчика.
import React, {useState} from ’react’function Counter () { const [count, setCount] = useState (0) const increment = () => { setCount (count +1)} return (Текущее значение: {count}
count в данном случае представляет начальное состояние (значение), которое мы указываем в useState, и setCount – это функция, которую мы используем для обновления этого состояния. В нашем случае, increment вызывает setCount, чтобы увеличить значение count.
Итак, обощим:
Пропсы (Props) – это данные, которые вы передаете в компонент извне, как параметры.
Стейт (State) – это данные, которые компонент «запоминает» и использует для отслеживания изменений и перерисовки себя.
6.2 Использование пропсов
Пропсы используются для передачи информации, такой как текст, числа, функции или объекты, от одного компонента к другому. Пропсы делают компоненты в React многоразовыми и настраиваемыми.
Вот основные аспекты работы с пропсами в React:
– Передача данных. Пропсы позволяют родительскому компоненту передавать данные в дочерний компонент. Эти данные могут быть переданы в виде атрибутов (параметров) при использовании компонента в JSX.
– Нестрогое чтение (доступ). Дочерний компонент может получить доступ к пропсам, используя props (для функциональных компонентов) или this.props (для классовых компонентов).
– Пропсы только для чтения. Пропсы являются только для чтения, что означает, что дочерний компонент не может изменять значения пропсов. Они предназначены только для отображения данных.
– Использование по умолчанию. Вы можете предоставить значения по умолчанию для пропсов, которые будут использоваться, если соответствующие пропсы не переданы из родительского компонента.
– Проверка типов (Type Checking). React позволяет проводить проверку типов пропсов с помощью PropTypes (для функциональных компонентов) или propTypes (для классовых компонентов). Это помогает предотвратить ошибки типов во время выполнения.
Пример использования:
import React from ’react’function Welcome (props) { returnПривет, {props.name}!
}function App () { return <Welcome name=«John» />}export default AppВ этом примере компонент App передает name=«John» в дочерний компонент Welcome через props.
Использование пропсов позволяет создавать компоненты, которые могут быть легко настраиваемыми и переиспользуемыми в различных контекстах
– Использование state
Стейт (state) в React представляет собой объект, который содержит данные, влияющие на отображение компонента, и используется для хранения информации, которая может изменяться со временем и должна быть учтена при перерисовке компонента.
Важные аспекты работы со стейтом в React:
– Локальный для компонента. Стейт обычно является локальным для компонента, что означает, что каждый компонент имеет свой собственный стейт. Это помогает изолировать данные и логику между компонентами.
– Инициализация. Стейт может быть инициализирован в конструкторе компонента при использовании классовых компонентов или с использованием хука useState в функциональных компонентах.
– Изменение стейта. Стейт можно изменять с помощью метода setState (для классовых компонентов) или функции, возвращаемой хуком useState (для функциональных компонентов). При изменении стейта React автоматически перерисовывает компонент.
– Асинхронность. Вы должны быть осторожны при изменении стейта, так как операции по его изменению могут быть асинхронными. React может объединять несколько обновлений стейта для оптимизации производительности.
– Неизменяемость (Immutability). Рекомендуется не изменять стейт напрямую, а создавать новый объект стейта с обновленными данными. Это помогает предотвратить мутацию стейта и упростить отслеживание изменений.
– Прокидывание стейта. Стейт может быть передан дочерним компонентам через пропсы, что позволяет им отображать и использовать данные из него.
Таким образом, state используется для хранения данных, которые могут изменяться и влиять на отображение компонента. Вы можете инициализировать стейт в конструкторе компонента и изменять его с помощью метода setState ().
Пример использования:
import React, {Component} from ’react’class Counter extends Component { constructor (props) { super (props)this.state = {count: 0}} incrementCount = () => {this.setState ({count: this.state.count +1})} render () { return (Счетчик: {this.state.count}
Рассмотрим код подробней.
Конструктор – это особая функция в React-компонентах, которая выполняется при создании нового экземпляра компонента. Она принимает props в качестве параметра и вызывает базовый конструктор через super (props), чтобы унаследовать функциональность родительского компонента. В конструкторе обычно инициализируют начальное состояние компонента и выполняют другие подготовительные операции.
Однако, в современных версиях React большинство разработчиков предпочитают использовать более современный синтаксис с хуками (useState, useEffect, и т.д.), который обеспечивает более читаемый и функциональный способ управления состоянием и эффектами. Хуки стали стандартом в React и рекомендуются для большинства проектов.
Тем не менее, знание о конструкторе важно, так как в некоторых случаях (например, в классовых компонентах) он может использоваться для настройки компонента или выполнения других специфических операций.
– constructor (props): Мы объявляем конструктор для нашего компонента и передаем ему props (свойства), которые компонент получит от родительского компонента. Таким образом, props содержат информацию о данных, которые компонент может использовать.
– super (props): Эта строка вызывает конструктор родительского класса (класса React.Component). Она необходима, чтобы наш компонент мог правильно наследовать функциональность React и корректно обрабатывать переданные свойства (props).
– this.state = {count: 0};: Здесь мы инициализируем локальное состояние компонента. В данном случае, мы создаем переменную count и устанавливаем ее значение на 0. Состояние – это способ для компонента React хранить и отслеживать изменения данных, которые могут влиять на отображение на веб-странице.
Итак, в этом коде мы подготавливаем наш компонент к работе, передавая ему свойства и инициализируя начальное состояние. Это важные шаги, которые делают наш компонент готовым к использованию и реагированию на изменения данных.
В этом примере компонент Counter (счетчик) имеет внутренний state, который используется для отслеживания количества нажатий на кнопку «Увеличить». Метод setState () обновляет состояние компонента, что влечет за собой перерендеринг.
– Ипользование пропсов и стейтов
Пропсы (props) позволяют передавать информацию от одного компонента к другому, что делает взаимодействие между компонентами в React гибким и модульным. С использованием состояния (state), вы можете управлять внутренними данными компонента, такими как значения полей ввода или флаги активации, что позволяет компоненту реагировать на пользовательские действия и динамически изменять свое отображение в соответствии с этими данными. Важно помнить, что props – это данные, которые передаются сверху вниз и не изменяются внутри компонента, в то время как state – это изменяемые данные, управляемые самим компонентом.
Используйте пропсы (props), чтобы передавать данные от родительского компонента к дочернему компоненту.
Используйте стейт (state), чтобы управлять внутренним состоянием компонента, которое может изменяться и влиять на его отображение.
Помните, что props – это неизменяемые, а state – изменяемые данные.
6.5 Заключение
Использование props и state в React является фундаментом для создания динамичных и интерактивных пользовательских интерфейсов. Пропсы позволяют компонентам обмениваться данными и структурировать приложение в виде множества многоразовых и переиспользуемых компонентов. Операция о своевременном обновлении состояния компонента через state является ключевой для создания отзывчивых приложений, которые реагируют на действия пользователя. Умение совмещать работу с props и state открывает широкие возможности для разработки сложных приложений.
В следующих главах, мы более подробно рассмотрим эти концепции и узнаем, как они взаимодействуют между собой для создания мощных React-приложений.
Глава 7. Методы жизненного цикла компонентов
Методы жизненного цикла компонентов в React предоставляют возможность управлять различными аспектами поведения компонента на разных этапах его существования. В этой главе мы рассмотрим основные методы жизненного цикла компонентов и как их использовать.
7.1 Введение в методы жизненного цикла
Методы жизненного цикла – это специальные функции, предоставляемые React, которые вызываются автоматически на различных этапах развития компонента. Эти методы позволяют встраивать логику и выполнить определенные действия в разные моменты времени, когда компонент создается, обновляется или удаляется. Таким образом, методы жизненного цикла компонента предоставляют разработчикам управление процессами и позволяют выполнять различные задачи в зависимости от текущего состояния компонента. Важно знать, когда и как использовать каждый из этих методов для эффективной работы с React-компонентами.
7.2 Основные методы жизненного цикла
В React компоненты проходят через различные этапы своего жизненного цикла, которые тесно связаны с процессами монтирования (создания и добавления в DOM) и размонтирования (удаления из DOM). Рассмотрим эти этапы подробнее:
Монтирование (Mounting):
– constructor (): Вызывается при создании объекта компонента. Здесь происходит инициализация состояния и привязка методов.
– static getDerivedStateFromProps (): Метод, вызываемый перед render, позволяющий компоненту обновить своё внутреннее состояние на основе изменений в свойствах.
– render (): Отвечает за отображение компонента, возвращая элементы для отображения в интерфейсе.
– componentDidMount (): Вызывается сразу после добавления компонента в DOM. Подходит для выполнения действий, которые требуют наличия компонента в DOM, например, запросов к серверу.
Размонтирование (Unmounting):
– componentWillUnmount (): Вызывается перед удалением компонента из DOM. Здесь происходит очистка ресурсов, таких как отмена запросов или удаление подписок.
Эти этапы жизненного цикла предоставляют точки вставки для кода, который должен выполняться при создании и удалении компонента. Дополнительно, React предоставляет другие важные методы жизненного цикла, такие как componentDidUpdate, который вызывается после обновления компонента и предоставляет возможность реагировать на изменения в props или state.
7.3 Пример использования методов жизненного цикла
Рассмотрим пример использования методов жизненного цикла:
import React, {Component} from ’react’class Timer extends Component { constructor (props) { super (props)this.state = {seconds: 0}} componentDidMount () {this.intervalId = setInterval (() => {this.setState ({seconds: this.state.seconds +1})}, 1000)} componentWillUnmount () {clearInterval(this.intervalId)} render () { returnСекунды: {this.state.seconds}
}}function App () { return <Timer />}export default AppВ этом примере:
– В методе constructor инициализируется начальное состояние компонента.
– В методе componentDidMount устанавливается интервал, который каждую секунду увеличивает значение seconds в состоянии.
– В методе componentWillUnmount интервал очищается перед удалением компонента из DOM, чтобы избежать утечек памяти.
7.4 Заключение
Методы жизненного цикла компонентов React позволяют управлять поведением компонента на разных этапах его жизни. Методы монтирования, обновления и размонтирования предоставляют ключевые точки внедрения для инициализации, реагирования на изменения и освобождения ресурсов.
Методы жизненного цикла служат не только инструментами технического управления компонентами, но и предоставляют возможности для оптимизации производительности, а также для реализации сложных логик и сценариев. Их грамотное использование способствует созданию более эффективных, надежных и легко поддерживаемых React-приложений.
В следующих главах мы рассмотрим конкретные практические сценарии использования этих методов, а также обсудим лучшие практики, которые помогут вам максимально извлечь пользу из возможностей, предоставляемых жизненным циклом React-компонентов.
Глава 8. Автоматическое создание объектов props в React
Автоматическое создание объектов props – это инструмент, который упрощает передачу данных между компонентами. Давайте рассмотрим, как этот подход может ускорить разработку и сделать ваш код более чистым и читаемым.
8.1 Введение в объект props в React
В React, props (сокращение от «properties» или «свойства») – это специальный объект, который используется для передачи данных и настроек от родительского компонента к дочернему компоненту. Он представляет собой набор свойств, которые доступны дочернему компоненту для использования. Эти свойства передаются в компонент в виде атрибутов JSX при его использовании.
Рассмотрим простой пример. У нас есть родительский компонент ParentComponent и дочерний компонент ChildComponent. Мы хотим передать строковое свойство message из родительского компонента в дочерний компонент для отображения:
// Родительский компонентfunction ParentComponent () { return <ChildComponent message=«Привет, мир!» />} // Дочерний компонент function ChildComponent (props) { return}
В приведенном примере, свойство message передается из родительского компонента ParentComponent в дочерний компонент ChildComponent следующим образом:
– В родительском компоненте, при использовании компонента ChildComponent, мы добавляем атрибут message и устанавливаем его значение в «Привет, мир!».
– Внутри дочернего компонента ChildComponent, это свойство становится доступным через объект props. мы можем получить доступ к нему, обратившись к props.message и использовать его для отображения внутри компонента.
Таким образом, через объект props в React можно сделать доступным любое свойство, которое вы определите и передадите из родительского компонента в дочерний компонент. Объект props предоставляет интерфейс для передачи данных между компонентами и позволяет динамически настраивать компоненты.
Через props вы можете передавать не только данные (такие как строки, числа, объекты), но и функции, обработчики событий и другие настройки компонента.
Что касается области видимости, то React обеспечивает уровень доступа к свойствам компонента через объект props, который может быть рассмотрен как «публичный интерфейс» компонента. Дочерний компонент не имеет доступа к свойствам родительского компонента напрямую, за исключением тех свойств, которые были явно переданы через props. Это обеспечивает инкапсуляцию21 и изоляцию компонентов и упрощает их переиспользование.
8.2 Роль объекта props в компонентах
В React компоненты организованы в древовидную структуру, где один компонент может быть родительским по отношению к другому. В React каждый компонент «знает» о своих дочерних компонентах, но дочерние компоненты не «знают» о своих родительских компонентах напрямую. Вместо этого родительские компоненты могут передавать данные и свойства своим дочерним компонентам через props.
Для того, чтобы определить, является ли текущий компонент родительским, можно воспользоваться следующими методами:
– Иерархия компонентов. Родительский компонент – это тот, который находится на более высоком уровне иерархии компонентов, и от которого исходят данные или свойства для одного или нескольких дочерних компонентов. Дочерний компонент, наоборот, находится внутри родительского компонента.
– Анализ кода. Если вы изучаете код приложения, родительский компонент обычно тот, который решает, какие данные передавать дочерним компонентам через props и какие обработчики событий передавать для взаимодействия с дочерними компонентами.
– Свойство children. Родительский компонент может использовать свойство children, чтобы передать дочерним компонентам элементы JSX внутри компонента. Если вы видите, что в родительском компоненте есть использование props.children, это может быть признаком того, что компонент решает, какие компоненты или элементы JSX вставлять внутри себя.
Конец ознакомительного фрагмента.
Текст предоставлен ООО «Литрес».
Прочитайте эту книгу целиком, купив полную легальную версию на Литрес.
Безопасно оплатить книгу можно банковской картой Visa, MasterCard, Maestro, со счета мобильного телефона, с платежного терминала, в салоне МТС или Связной, через PayPal, WebMoney, Яндекс.Деньги, QIWI Кошелек, бонусными картами или другим удобным Вам способом.