Skip to content

Commit 2247616

Browse files
committed
fix: исправлены ошибки линтеров
1 parent e403f76 commit 2247616

8 files changed

Lines changed: 134 additions & 122 deletions

File tree

Lines changed: 34 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -1,64 +1,68 @@
1-
import React, { useState, memo, useMemo, useCallback } from "react"
1+
import React, { useState, memo, useMemo, useCallback } from "react";
22

33
const heavyDouble = (num) => {
44
let result = 0;
55
// Двойной цикл для большей задержки
66
for (let i = 0; i < 100000; i++) {
77
for (let j = 0; j < 10000; j++) {
8-
result = num * 2 + i + j; // Какая-то "полезная" работа
8+
result = num * 2 + i + j; // Какая-то "полезная" работа
99
}
1010
}
1111
return result;
12-
}
12+
};
1313

1414
export default function ExamplePage() {
15-
const [count, setCount] = useState(0)
16-
const [name, setName] = useState('Alla')
17-
const [isAdmin, setIsAdmin] = useState(false)
18-
const [dark, setDark] = useState(false)
15+
const [count, setCount] = useState(0);
16+
const [name, setName] = useState("Alla");
17+
const [isAdmin, setIsAdmin] = useState(false);
18+
const [dark, setDark] = useState(false);
1919

2020
const themeStyle = {
21-
backgroundColor: dark ? 'tomato' : 'white'
22-
}
21+
backgroundColor: dark ? "tomato" : "white",
22+
};
2323

2424
const setDarkTheme = () => {
25-
setDark(prev => !prev)
26-
}
25+
setDark((prev) => !prev);
26+
};
2727

28-
const memoUser = useMemo(() => ({
29-
name, isAdmin
30-
}), [name, isAdmin])
28+
const memoUser = useMemo(
29+
() => ({
30+
name,
31+
isAdmin,
32+
}),
33+
[name, isAdmin]
34+
);
3135

3236
const incrementCount = () => {
33-
setCount(count => count + 1)
34-
}
37+
setCount((count) => count + 1);
38+
};
3539

3640
const resetCount = useCallback(() => {
37-
setCount(0)
38-
}, [])
41+
setCount(0);
42+
}, []);
3943

40-
const doubleCount = useMemo(() => heavyDouble(count), [count])
44+
const doubleCount = useMemo(() => heavyDouble(count), [count]);
4145

4246
return (
43-
<div style={{...themeStyle}}>
44-
<Title user={memoUser} resetCount={resetCount}/>
45-
<CountInfo count={doubleCount}/>
47+
<div style={{ ...themeStyle }}>
48+
<Title user={memoUser} resetCount={resetCount} />
49+
<CountInfo count={doubleCount} />
4650
<button onClick={incrementCount}> + 1 </button>
4751
<button onClick={setDarkTheme}>Dark</button>
4852
</div>
49-
)
53+
);
5054
}
5155

52-
const Title = React.memo(({user, resetCount}) => {
53-
console.log('Title rendered')
54-
const {name, isAdmin} = user
56+
const Title = React.memo(({ user, resetCount }) => {
57+
console.log("Title rendered");
58+
const { name, isAdmin } = user;
5559

5660
return (
5761
<>
58-
<h1>{isAdmin? name : 'Example'}</h1>
62+
<h1>{isAdmin ? name : "Example"}</h1>
5963
<button onClick={resetCount}>RESET</button>
6064
</>
61-
)
62-
})
65+
);
66+
});
6367

64-
const CountInfo = ({count}) => <h3>Count value {count}</h3>
68+
const CountInfo = ({ count }) => <h3>Count value {count}</h3>;
Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { useState } from "react"
1+
import { useState } from "react";
22

33
// const heavyDouble = (num) => {
44
// let result = 0;
@@ -12,21 +12,21 @@ import { useState } from "react"
1212
// }
1313

1414
export default function ExamplePage() {
15-
const [count, setCount] = useState(0)
15+
const [count, setCount] = useState(0);
1616

17-
const incrementCount = () => {}
17+
const incrementCount = () => {};
1818

1919
return (
2020
<>
2121
<Title />
2222
<CountInfo />
2323
<button> + 1 </button>
2424
</>
25-
)
25+
);
2626
}
2727

2828
const Title = () => {
29-
<h1>Example</h1>
30-
}
29+
<h1>Example</h1>;
30+
};
3131

32-
const CountInfo = ({count}) => <h3>Count value {count}</h3>
32+
const CountInfo = ({ count }) => <h3>Count value {count}</h3>;
Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
1-
import { memo } from "react"
1+
import { memo } from "react";
22

33
// Дочерний компонент, который мы хотим оптимизировать
44
export const CounterButton = memo(({ onClick, label }) => {
5-
console.log('Кнопка перерендерилась:', label);
5+
console.log("Кнопка перерендерилась:", label);
66

77
return <button onClick={onClick}>{label}</button>;
88
});
Lines changed: 16 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,21 @@
1-
import { useCallback, useState } from "react"
1+
import { useCallback, useState } from "react";
22

3-
import { CounterButton } from "./CounterButton"
3+
import { CounterButton } from "./CounterButton";
44

55
function UseCallbackPage1() {
6-
7-
const [counter, setCounter] = useState(0)
6+
const [counter, setCounter] = useState(0);
87

98
const incrementCounter = useCallback(() => {
10-
setCounter(counter + 1)
11-
}, [counter])
9+
setCounter(counter + 1);
10+
}, [counter]);
1211

1312
return (
1413
<>
1514
<h1>useCallback</h1>
1615
<h3>{counter}</h3>
1716
<button onClick={incrementCounter}> + 1 </button>
1817
</>
19-
)
18+
);
2019
}
2120

2221
function UseCallbackPage() {
@@ -25,38 +24,32 @@ function UseCallbackPage() {
2524

2625
// Функция не меняется между рендерами
2726
const incrementCounter = useCallback(() => {
28-
setCounter(prev => prev + 1); // Используем функциональное обновление
27+
setCounter((prev) => prev + 1); // Используем функциональное обновление
2928
}, []); // Пустые зависимости - функция стабильна
3029

3130
// Без useCallback - создается новая функция при каждом рендере
3231
const badIncrement = () => {
33-
setCounter(prev => prev + 1);
32+
setCounter((prev) => prev + 1);
3433
};
3534

3635
return (
3736
<div>
3837
<h1>useCallback</h1>
3938
<h3>Счетчик: {counter}</h3>
40-
39+
4140
{/* С useCallback - кнопка не перерендеривается лишний раз */}
42-
<CounterButton
43-
onClick={incrementCounter}
44-
label="+1 (с useCallback)"
45-
/>
46-
41+
<CounterButton onClick={incrementCounter} label="+1 (с useCallback)" />
42+
4743
{/* Без useCallback - кнопка перерендеривается всегда */}
48-
<CounterButton
49-
onClick={badIncrement}
50-
label="+1 (без useCallback)"
51-
/>
52-
53-
<button onClick={() => setDummy(d => d + 1)}>
44+
<CounterButton onClick={badIncrement} label="+1 (без useCallback)" />
45+
46+
<button onClick={() => setDummy((d) => d + 1)}>
5447
Принудительный перерендер ({dummy})
5548
</button>
56-
49+
5750
<p>Откройте консоль и нажимайте "Принудительный перерендер"</p>
5851
</div>
5952
);
6053
}
6154

62-
export default UseCallbackPage
55+
export default UseCallbackPage;
Lines changed: 21 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -1,38 +1,38 @@
1-
import { useEffect, useState } from "react"
1+
import { useEffect, useState } from "react";
22

33
// 1. Не передать ничего
44
function UseEffectPage1() {
5-
const [, setValue] = useState({})
5+
const [, setValue] = useState({});
66

77
useEffect(() => {
8-
// Эффект срабатывает при монтировании компонента и при каждом рендере.
9-
console.log('Срабатываю на каждый рендер')
10-
})
8+
// Эффект срабатывает при монтировании компонента и при каждом рендере.
9+
console.log("Срабатываю на каждый рендер");
10+
});
1111

1212
return (
1313
<div>
1414
<h1>useEffect</h1>
1515
<button onClick={() => setValue({})}>Обновить состояние</button>
1616
</div>
17-
)
17+
);
1818
}
1919

2020
// 2. Передать пустой массив - []
2121
function UseEffectPage2() {
22-
const [count, setCount] = useState(0)
22+
const [count, setCount] = useState(0);
2323

2424
useEffect(() => {
25-
// Эффект срабатывает только при монтировании компонента.
26-
console.log('Сработаю 1 раз')
27-
}, [])
25+
// Эффект срабатывает только при монтировании компонента.
26+
console.log("Сработаю 1 раз");
27+
}, []);
2828

2929
return (
3030
<div>
3131
<h1>useEffect</h1>
3232
<h3>{count}</h3>
3333
<button onClick={() => setCount((prev) => prev + 1)}> + 1</button>
3434
</div>
35-
)
35+
);
3636
}
3737

3838
// 3. Передать массив с переменными для отслеживания - [value]
@@ -44,14 +44,13 @@ function UseEffectPage3({ userId = 2 }) {
4444
useEffect(() => {
4545
if (!userId) return;
4646

47-
console.log('Сработаю при монтировании и изменении userId')
47+
console.log("Сработаю при монтировании и изменении userId");
4848

4949
fetch(`https://jsonplaceholder.typicode.com/users/${userId}`)
50-
.then(response => response.json)
51-
.then(json => setUser(json))
52-
.catch(error => console.error('Ошибка загрузки:', error))
53-
.finally(() => setIsLoading(false))
54-
50+
.then((response) => response.json)
51+
.then((json) => setUser(json))
52+
.catch((error) => console.error("Ошибка загрузки:", error))
53+
.finally(() => setIsLoading(false));
5554
}, [userId]); // Запускается заново, если изменился userId
5655

5756
if (isLoading) return <div>Загрузка...</div>;
@@ -71,18 +70,18 @@ function UseEffectPage() {
7170
const [time, setTime] = useState(new Date().toLocaleTimeString());
7271

7372
useEffect(() => {
74-
console.log('✅ Таймер запущен');
75-
73+
console.log("✅ Таймер запущен");
74+
7675
// Запускаем интервал при монтировании
7776
const intervalId = setInterval(() => {
7877
const currentTime = new Date().toLocaleTimeString();
7978
setTime(currentTime);
80-
console.log('🕒 Время обновлено:', currentTime);
79+
console.log("🕒 Время обновлено:", currentTime);
8180
}, 1000);
8281

8382
// Функция очистки
8483
return () => {
85-
console.log('Таймер остановлен');
84+
console.log("Таймер остановлен");
8685
clearInterval(intervalId);
8786
};
8887
}, []); // Пустой массив - эффект только при монтировании/размонтировании
@@ -94,5 +93,4 @@ function UseEffectPage() {
9493
);
9594
}
9695

97-
98-
export default UseEffectPage
96+
export default UseEffectPage;

lessons/lesson31/examples/useMemoPage/TodoList.jsx

Lines changed: 13 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,28 +1,29 @@
1-
import { useMemo } from 'react';
1+
import { useMemo } from "react";
22

33
export default function TodoList({ todos, filter }) {
44
// БЕЗ useMemo: фильтрация происходит при каждом рендере
55
// const visibleTodos = todos.filter(todo => {
6-
// console.log('🔴 ФИЛЬТРАЦИЯ (без useMemo)'); // Это будет логироваться часто
7-
// console.log('--------------------'); // Это будет логироваться часто
8-
// return filter === 'all' ||
9-
// (filter === 'completed' && todo.completed) ||
10-
// (filter === 'active' && !todo.completed);
6+
// console.log("🔴 ФИЛЬТРАЦИЯ (без useMemo)"); // Это будет логироваться часто
7+
// console.log("--------------------"); // Это будет логироваться часто
8+
// return filter === "all" ||
9+
// (filter === "completed" && todo.completed) ||
10+
// (filter === "active" && !todo.completed);
1111
// });
1212

1313
// С useMemo: фильтрация происходит только при изменении todos или filter
1414
const visibleTodos = useMemo(() => {
15-
console.log('🟢 ФИЛЬТРАЦИЯ (с useMemo)'); // Логируется только при изменении зависимостей
16-
return todos.filter(todo =>
17-
filter === 'all' ||
18-
(filter === 'completed' && todo.completed) ||
19-
(filter === 'active' && !todo.completed)
15+
console.log("🟢 ФИЛЬТРАЦИЯ (с useMemo)"); // Логируется только при изменении зависимостей
16+
return todos.filter(
17+
(todo) =>
18+
filter === "all" ||
19+
(filter === "completed" && todo.completed) ||
20+
(filter === "active" && !todo.completed)
2021
);
2122
}, [todos, filter]); // Зависимости: todos и filter
2223

2324
return (
2425
<ul>
25-
{visibleTodos.map(todo => (
26+
{visibleTodos.map((todo) => (
2627
<li key={todo.id}>{todo.text}</li>
2728
))}
2829
</ul>

0 commit comments

Comments
 (0)