React basics
JSX
JSX
- это синтаксическое расширение для JavaScript (функции CreateElement)
Babel
компилируетJSX
в вызовыReact.createElement()
Теги начинаются с заглавной буквы (чтобы отличить React-компоненты от html тегов)
т.к. неявно вызывается функция
React.createElement
, в файле должен бытьimport React from 'react'
атрибуты: class ===
className
, for ===htmlFor
встраивание пользовательского ввода в JSX является безопасным (не допускает XSS-атак) - потому что все преобразуется в строку, а не выполняется
Presentation vs Container components
Container
делают API запросы
подключены к Store,
часто созданы через
class
используют lifecycle hooks
Presentation
получают данные через
props
и отрисовываютредко могут иметь свой локальный state, но это состояние UI, а не бизнес-данных (например, выбран ли checkbox)
часто созданны через
function
Lifecycle
Mounting
constructor(props)
- (не обязательный,, если не нужно инициализировать там state)static
getDerrivedStateFromProps(props, state)
(возвращает объект, который и будет this.state)render()
componentDidMount()
(хорошее место для API-запросов, подписок на события)
Updating
static
getDerrivedStateFromProps(props, state)
shouldComponentUpdate()
(если вернет false, render и все нижние хуки не вызовутся)render()
getSnapshotBeforeUpdate()
- перед коммитом изменений в реальный DOM, возвращенное из метода значение станет 3-м аргументомcomponentDidUpdate(prevProps, prevState, snapshot)
Unmounting
componentWillUnmount()
- (отписаться от событий, удалить таймеры, ...)
Error Handling
static
getDerivedStateFromError(error)
- возвращает значение для изменения state (тут не должно быть side-effects)componentDidCatch(error, info)
- можно использовать для side-effects, например залогировать ошибку в логгер
State vs Props
Props
передаются в компонент из-вне
так ще компонент может иметь дефолтные props
props нельзя изменить (однонаправленный поток данных, сверху-вниз)
State
хранит внутреннее состояние компонента
для того, чтобы хранить информацию между рендерами
при изменении состояния происходит render
setState() асинхронный, иммутабельный, можно внутрь передавать функцию или объект (если не зависим от прошлого состояния)
Refs
Refs provide a way to access DOM nodes or React elements created in the render method.
#forwarding Refs
Ref forwarding is a technique for automatically passing a ref through a component to one of its children
Events
React events are named using camelCase, rather than lowercase.
with JSX you pass a function as the event handler, rather than a string.
React uses a synthetic event. React defines these synthetic events according to the W3C spec, so you don’t need to worry about cross-browser compatibility
#SyntheticEvent
SyntheticEvent, a cross-browser wrapper around the browser’s native event. It has the same interface as the browser’s native event, including
stopPropagation()
andpreventDefault()
, except the events work identically across all browsers.
Forms
uncontrolled input - will use
ref
to get the form values.
controlled input (+ validation, notifications)
Data fetching
React itself doesn’t have any allegiance to any particular way of fetching data.
axios (promises)
fetch (browser api)
Last updated