Compare commits

..

1 Commits

Author SHA1 Message Date
laktionov-as ef33d16373 Сделали React.memo и React.useMemo 2026-05-21 21:33:02 +03:00
+42 -28
View File
@@ -1,32 +1,50 @@
import React, { useMemo, useCallback, useState } from 'react' import { memo, useState, useMemo } from 'react'
const TodoItem = React.memo(({ item, onToggle, onDelete }) => { function memoize(fn) {
console.log(`rendred ${item.id}`); const cache = new Map();
return <li> return function(...args) {
{item.name} const key = JSON.stringify(args);
<button onClick={() => onToggle(item.id)}>Done</button> if (cache.has(key)) {
<button onClick={() => onDelete(item.id)}>remove</button> return cache.get(key);
</li> }
}) const result = fn.apply(this, args);
cache.set(key,result);
return result;
}
}
function ItemList({ items }) { function fibonachi(n, memo={}) {
if (n in memo) {console.log(n);return memo[n];}
if (n <= 1) return 1;
memo[n] = fibonachi(n-1, memo) + fibonachi(n - 2, memo);
return memo[n];
}
const handleToggle = useCallback(id => { const MyComponent = ({ value }) => {
items.done = true; console.log('Rendring');
console.log(`Item ${id} done`) return <div>{value}</div>
console.log(id) }
},[]);
const MemoizedComponent = memo(MyComponent);
const Child = memo(({ children }) => {
console.log('Child component rendred');
return <div>{children}</div>;
});
const Parent = () => {
const [count,setCount] = useState(0);
const [text, setText] = useState('');
const stableChild = useMemo(() => <span>Memo text</span>,[]);
const handleDelete = useCallback(id => {
items.pop(id);
},[]);
return ( return (
<> <>
<h3>List items</h3> <Child>
{items.map(item => ( {stableChild}
<TodoItem key={item.id} item={item} </Child>
onToggle={handleToggle} onDelete={handleDelete} /> <input type="text" onChange={(e) => setText(e.target.value)} value={text} />
))} <button onClick={() => setCount(count + 1)}>Increment {count}</button>
</> </>
) )
} }
@@ -34,12 +52,8 @@ function ItemList({ items }) {
function App() { function App() {
return ( return (
<> <>
{/* Добавьте тестовый контент для проверки */}
<h1>Hello, React!</h1> <h1>Hello, React!</h1>
<ItemList items={[ <Parent />
{id:1,name:'Первый',done:false},
{id:2,name:'Второй',done:false}
]} />
</> </>
) )
} }