Skip to content

Commit 9ed6672

Browse files
exceedbookgitbook-bot
authored andcommitted
GitBook: [master] 29 pages and 2 assets modified
1 parent f5fea14 commit 9ed6672

30 files changed

+1171
-40
lines changed
File renamed without changes.

README.md

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,15 @@
11
# Вступление
22

3-
Данная ~~книга~~ статья посвящена для помощи всех желающих научиться писать компоненты на `React` с использованием хуков и обучению основам работы с `Redux` .
3+
Данная ~~книга~~ статья посвящена для помощи всех желающих научиться писать компоненты на `React` с использованием хуков и обучению основам работы с `Redux` .
44

55
Актуальность темы заключается в том, что фронтенд — одно из наиболее динамично развивающихся направлений современной разработки, а `react` одна из популярнейших технологий разработки веб-сайтов.
66

77
Для осуществления обозначенной цели служат следующие задачи:
88

9-
1. описание [основ](https://vrogov-exceedteam.gitbook.io/react-hooks-redux/react/vstuplenie) использования `хуков`;
10-
2. [практика](https://vrogov-exceedteam.gitbook.io/react-hooks-redux/react/react-hooks) написания компонентов на `хуках`;
11-
3. [изучение](https://vrogov-exceedteam.gitbook.io/react-hooks-redux/redux-1/sho-take-redaks) `redux`;
12-
4. [добавление](https://vrogov-exceedteam.gitbook.io/react-hooks-redux/redux-1/redux) `redux` в проект.
9+
1. описание основ использования `хуков`;
10+
2. практика написания компонентов на `хуках`;
11+
3. изучение `redux`;
12+
4. добавление `redux` в проект.
13+
14+
1315

SUMMARY.md

Lines changed: 35 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -2,39 +2,39 @@
22

33
* [Вступление](README.md)
44

5-
## React hooks <a id="react"></a>
6-
7-
* [Введение в хуки](react/vstuplenie.md)
8-
* [Основные хуки](react/osnovy/README.md)
9-
* [Хук состояния \(useState\)](react/osnovy/khuk-sostoyaniya-usestate.md)
10-
* [Хук эффекта \(useEffect\)](react/osnovy/khuk-effekta-useeffect.md)
11-
* [Хук колбека \(useCallback\)](react/osnovy/khuk-kollbeka-usecallback.md)
12-
* [Хук рефа \(useRef\)](react/osnovy/khuk-refa-useref.md)
13-
* [Создание собственных хуков](react/sozdanie-sobstvennykh-khukov.md)
14-
* [Правила использования хуков](react/pravila-ispolzovaniya-khukov.md)
15-
* [Полезная информация](react/chto-dalshe/README.md)
16-
* [Хук мемоизированного значения \(useMemo\)](react/chto-dalshe/khuk-memoizirovannogo-znacheniya-usememo.md)
17-
* [Как закешировать вычисления?](react/chto-dalshe/kak-zakeshirovat-vychisleniya.md)
18-
* [Как получить предыдущие пропсы или состояние?](react/chto-dalshe/kak-poluchit-predydushie-propsy-ili-sostoyanie.md)
19-
* [Как осуществлять запросы за данными с помощью хуков?](react/chto-dalshe/kak-osushestvlyat-zaprosy-za-dannymi-s-pomoshyu-khukov.md)
20-
* [Задание React Hooks](react/react-hooks.md)
21-
22-
## Redux <a id="redux-1"></a>
23-
24-
* [Что такое Redux](redux-1/sho-take-redaks.md)
25-
* [Основы](redux-1/untitled/README.md)
26-
* [Действия \(Actions\)](redux-1/untitled/deistviya-actions.md)
27-
* [Генераторы действий \(Action Creators\)](redux-1/untitled/generatory-deistvii-action-creators.md)
28-
* [Редюсеры \(Reducers\)](redux-1/untitled/redyusery-reducers.md)
29-
* [Хранилище \(Store\)](redux-1/untitled/khranilishe-store.md)
30-
* [Получение доступа к actions и state с помощью функции connect\(\)](redux-1/untitled/poluchenie-dostupa-k-state-iz-funkcii-mapdispatchtoprops.md)
31-
* [Подключение Redux](redux-1/untitled/podklyuchenie-redux.md)
32-
* [Что дальше?](redux-1/chto-dalshe/README.md)
33-
* [Использование Redux с React Router](redux-1/chto-dalshe/ispolzovanie-redux-s-react-router.md)
34-
* [Асинхронные действия \(Async Actions\)](redux-1/chto-dalshe/asinkhronnye-deistviya-async-actions.md)
35-
* [Задание Redux](redux-1/redux.md)
36-
37-
## FAQ <a id="fakyu"></a>
38-
39-
* [Заключение](fakyu/zaklyuchenie.md)
5+
## REACT HOOKS
6+
7+
* [Введение в хуки](react-hooks/vvedenie-v-khuki.md)
8+
* [Основные хуки](react-hooks/osnovnye-khuki/README.md)
9+
* [Хук состояния \(useState\)](react-hooks/osnovnye-khuki/khuk-sostoyaniya-usestate.md)
10+
* [Хук эффекта \(useEffect\)](react-hooks/osnovnye-khuki/khuk-effekta-useeffect.md)
11+
* [Хук колбека \(useCallback\)](react-hooks/osnovnye-khuki/khuk-kolbeka-usecallback.md)
12+
* [Хук рефа \(useRef\)](react-hooks/osnovnye-khuki/khuk-refa-useref.md)
13+
* [Создание собственных хуков](react-hooks/sozdanie-sobstvennykh-khukov.md)
14+
* [Правила использования хуков](react-hooks/pravila-ispolzovaniya-khukov.md)
15+
* [Полезная информация](react-hooks/poleznaya-informaciya/README.md)
16+
* [Хук мемоизированного значения \(useMemo\)](react-hooks/poleznaya-informaciya/khuk-memoizirovannogo-znacheniya-usememo.md)
17+
* [Как закешировать вычисления?](react-hooks/poleznaya-informaciya/kak-zakeshirovat-vychisleniya.md)
18+
* [Как получить предыдущие пропсы или состояние?](react-hooks/poleznaya-informaciya/kak-poluchit-predydushie-propsy-ili-sostoyanie.md)
19+
* [Как осуществлять запросы за данными с помощью хуков?](react-hooks/poleznaya-informaciya/kak-osushestvlyat-zaprosy-za-dannymi-s-pomoshyu-khukov.md)
20+
* [Задание React Hooks](react-hooks/zadanie-react-hooks.md)
21+
22+
## REDUX
23+
24+
* [Что такое Redux](redux/chto-takoe-redux.md)
25+
* [Основы](redux/osnovy/README.md)
26+
* [Действия \(Actions\)](redux/osnovy/deistviya-actions.md)
27+
* [Генераторы действий \(Action Creators\)](redux/osnovy/generatory-deistvii-action-creators.md)
28+
* [Редюсеры \(Reducers\)](redux/osnovy/redyusery-reducers.md)
29+
* [Хранилище \(Store\)](redux/osnovy/khranilishe-store.md)
30+
* [Получение доступа к actions и state с помощью функции connect\(\)](redux/osnovy/poluchenie-dostupa-k-actions-i-state-s-pomoshyu-funkcii-connect.md)
31+
* [Подключение Redux](redux/osnovy/podklyuchenie-redux.md)
32+
* [Что дальше?](redux/chto-dalshe/README.md)
33+
* [Асинхронные действия \(Async Actions\)](redux/chto-dalshe/asinkhronnye-deistviya-async-actions.md)
34+
* [Использование Redux с React Router](redux/chto-dalshe/ispolzovanie-redux-s-react-router.md)
35+
* [Задание Redux](redux/zadanie-redux.md)
36+
37+
## FAQ
38+
39+
* [Заключение](faq/zaklyuchenie.md)
4040

faq/zaklyuchenie.md

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
# Заключение
2+
3+
Итак, теперь вы изучили основы React hooks и теперь знаете как использовать менеджер состояния Redux, но что делать дальше?
4+
5+
![](../.gitbook/assets/2300883_3.jpg)
6+
7+
Искать интересные статьи, которые поднимут ваши навыки и знания React.js на новый уровень![
8+
](https://app.gitbook.com/@vrogov-exceedteam/s/react-hooks-redux/redux-1/redux)
9+
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
# Основные хуки
2+
3+
В этом разделе рассмотрим основные хуки с которыми приходится работать постоянно:
4+
5+
1. Хук состояния - `useState`
6+
2. Хук жизненного цикла \(эффекта\) - `useEffect`
7+
3. Хук коллбека - `useCallback`
8+
4. Хук рефа - `useRef`
9+
10+
####
11+
12+
####
13+
14+
####
15+
16+
####
17+
Lines changed: 83 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,83 @@
1+
---
2+
description: >-
3+
будет гарно если человек увидит все варианты жизненных циклов с помощью этого
4+
хука - це Дима
5+
---
6+
7+
# Хук эффекта \(useEffect\)
8+
9+
`useEffect` - выполняет ту же роль, что и `componentDidMount`, `componentDidUpdate` и `componentWillUnmount` в React-классах, но объединяет их в единый API.
10+
11+
### useEffect как componentDidUpdate
12+
13+
```jsx
14+
function showMyStatus(props) {
15+
const [isOnline, setIsOnline] = useState(false);
16+
useEffect(() => {
17+
function handleStatusChange(status) {
18+
setIsOnline(status.isOnline);
19+
}
20+
21+
//делаем что-то для обновления статуса, например:
22+
API.login(props.id, handleStatusChange);
23+
});
24+
25+
return (
26+
<div> Status: {isOnline ? 'Online' : 'Offline'} </div>
27+
);
28+
}
29+
```
30+
31+
**Что же делает `useEffect`?** Используя этот хук, мы говорим React сделать что-то после рендера. React запомнит функцию \(эффект\) и вызовет её после того, как внесёт все изменения в DOM.
32+
33+
Если необходимо чтобы React _пропускал_ вызов эффекта, если определённые значения остались без изменений между последующими рендерами, передайте массив в `useEffect` вторым необязательным аргументом так:
34+
35+
```jsx
36+
useEffect(() => {
37+
document.title = `Вы нажали ${count} раз`;
38+
}, [count]); // Перезапускать эффект только если count поменялся
39+
```
40+
41+
Рассмотрим варианты использования хука эффекта более подробно.
42+
43+
### useEffect как componentDidMount
44+
45+
`componentDidMount()` вызывается один раз, сразу после монтирования компонента. Инициализация, требующая доступа к узлам DOM, должна находиться здесь. Если вам нужно загружать данные с удаленного источника, это хорошее место для инициирования сетевого запроса.
46+
47+
Чтобы реализовать метод `componentDidMount()` с помощью `useEffect`, достаточно передать в пустой массив вторым аргументом в `useEffect`.
48+
49+
```jsx
50+
function counter(props) {
51+
const [state, setState] = useState(0);
52+
useEffect(() => {
53+
setState(0);
54+
}, []);
55+
56+
return (
57+
<div> Count: {state} </div>
58+
);
59+
}
60+
```
61+
62+
Таким образом useEffect вызывается один раз, сразу после монтирования компонента.
63+
64+
### useEffect как componentWillUnmount
65+
66+
`сomponentWillUnmount()` вызывается непосредственно перед демонтированием и уничтожением компонента.
67+
68+
Чтобы повторить `сomponentWillUnmount()` , необходимо возвращать в `useEffect` функцию отчистки:
69+
70+
```jsx
71+
...
72+
73+
useEffect(() => {
74+
document.addEventListener('mousedown', handleClick, false);
75+
76+
return () => {
77+
document.removeEventListener('mousedown', handleClick, false);
78+
};
79+
}, []);
80+
81+
...
82+
```
83+
Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
# Хук колбека \(useCallback\)
2+
3+
`useCallback` - Возвращает мемоизированный колбэк.
4+
5+
> **Мемоизация** \(запоминание, от англ. memoization\) — в программировании сохранение результатов выполнения функций для предотвращения повторных вычислений. Это один из способов оптимизации, применяемый для увеличения скорости выполнения компьютерных программ. Перед вызовом функции проверяется, вызывалась ли функция ранее:
6+
>
7+
> * если не вызывалась, то функция вызывается, и результат её выполнения сохраняется;
8+
> * если вызывалась, то используется сохранённый результат.
9+
10+
`useCallback` принимает в качестве аргументов встроенный колбэк и массив зависимостей. Возвращает мемоизированную версию колбэка, который изменяется только, если изменяются значения одной из зависимостей:
11+
12+
```jsx
13+
const memoizedCallback = useCallback(
14+
() => {
15+
doSomething(a, b);
16+
},
17+
[a, b],
18+
);
19+
```
20+
21+
Пример:
22+
23+
```jsx
24+
function renderInput() {
25+
const [value, setValue] = useState();
26+
const [secondInput, setSecondInput] = useState();
27+
const callbackCach = useCallback(e => setValue(e.target.value), []);
28+
return (
29+
<div>
30+
<h1>Callbacks caching examples:</h1>
31+
32+
<div className="part">
33+
<h3>Using useCallback hook:</h3>
34+
<Input onChange={callbackCach} />
35+
<p>Input value is: {value}</p>
36+
</div>
37+
38+
<div className="part">
39+
<h3>Without useCallback hook:</h3>
40+
<Input onChange={e => setSecondInput(e.target.value)} />
41+
<p>Input value is: {secondInput}</p>
42+
</div>
43+
</div>
44+
);
45+
}
46+
```
47+
48+
В этом примере `useCallback` возвращает закешированную функцию \(то есть ссылка не изменяется от рендера к рендеру\). Помимо функции, которую нужно кешировать, в нее передан второй аргумент — пустой массив. Этот массив позволяет передать список полей, при изменении которых необходимо изменить функцию, т.е. вернуть новую ссылку.
49+
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
# Хук рефа \(useRef\)
2+
3+
`useRef` - возвращает изменяемый ref-объект, свойство `.current` которого инициализируется переданным аргументом \(`initialValue`\). Возвращённый объект будет сохраняться в течение всего времени жизни компонента.
4+
5+
```jsx
6+
const refContainer = useRef(initialValue);
7+
```
8+
9+
Давайте посмотрим пример использования useRef\(\) hook:
10+
11+
```jsx
12+
function TextInputWithFocusButton() {
13+
const [name, setName] = useState('');
14+
const nameRef = useRef(null);
15+
const onButtonClick = () => {
16+
// `current` указывает на смонтированный элемент `input`
17+
setName(nameRef.current.value);
18+
};
19+
return (
20+
<div>
21+
<p>{name}</p>
22+
23+
<input ref={nameRef} type="text" />
24+
<button onClick={onButtonClick}>Задать имя</button>
25+
</div>
26+
);
27+
}
28+
```
29+
30+
В приведенном выше примере мы используем `useRef` в сочетании с `useState`, чтобы отрендерить значение `input` в тег `p`.
31+
32+
Ref создается в переменной `nameRef`. Затем переменную `nameRef` можно использовать в `input`, задав как `ref`. По существу, это означает, что теперь поле ввода будет доступно через `ref`.
33+
34+
`setName` будет использоваться для установки state `name`. Чтобы извлечь имя из тега `input`, мы читаем значение `nameRef.current.value`.
35+
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
# Хук состояния \(useState\)
2+
3+
`useState` — вызывается, чтобы наделить наш функциональный компонент внутренним состоянием. React будет хранить это состояние между рендерами.
4+
5+
```jsx
6+
function Counter (props) {
7+
const [count, setCounter] = useState(0);
8+
9+
return (
10+
<Button onClick={() => setCounter(count + 1)}>Count {count} </Button>
11+
);
12+
}
13+
```
14+
15+
Вызов `useState` возвращает две вещи: _текущее_ значение состояния и функцию для его обновления. Эту функцию можно использовать где угодно, например, в обработчике событий. Она схожа с `this.setState`в классах, но не сливает новое и старое состояние вместе.
16+
17+
**Важно:** Хук состояния можно использовать в компоненте более одного раза.
18+
19+
```jsx
20+
// Объявляем несколько переменных состояния!
21+
const [name, setName] = useState('James');
22+
const [age, setAge] = useState(32);
23+
const [todos, setTodos] = useState([{ text: 'Изучить хуки' }]);
24+
// ...
25+
```
26+
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
# Полезная информация
2+

0 commit comments

Comments
 (0)