Compare commits

..

1 Commits

Author SHA1 Message Date
laktionov-as 10e56d8aaa useMemo 2026-05-26 20:59:44 +03:00
+69 -45
View File
@@ -1,58 +1,82 @@
import React from 'react' import memo, { useMemo, useCallback, useState } from 'react'
class RandomUser extends React.Component { function MyComponent() {
constructor(props) { const [count, setCount] = useState(0);
super(props) const [name, setName] = useState('John');
this.state = { user: {} }
}
componentDidMount() { const greeting = useMemo(() => `Hello, ${name}!`,[name]);
fetch('https://randomuser.me/api')
.then(responce => responce.json())
.then(json => this.setState({ user: json.results[0] }));
console.log('смонтирован')
}
componentDidUpdate(prevProps,prevState) { return (
console.log(this.state); <>
console.log('Компонент обнвлен') <h2>{greeting}</h2>
} <button onClick={()=>setName('Alex')}>New name</button>
</>
)
}
componentWillUnmount() { function MyComponent2() {
console.log('Компонент таймера размонтирован') const [data,setData] = useState([{theme:'light'}])
} const userPreferences = useMemo(()=>({theme: 'dark', language: 'en'}),[]);
render() { const processData = useMemo(()=>{
return <div> return data.map(item => ({ ...item,theme: userPreferences.theme }))
{this.state.user && },[data, userPreferences]);
this.state.user.name && console.log(processData);
( return (
<> <>
<h2>{this.state.user.name.first} {this.state.user.name.last}</h2> <h2 className={data.theme}>2</h2>
<img src={this.state.user.picture.medium} /> <button onClick={()=>setData(data)}>set new theme</button>
<button onClick={() => { </>
console.log('Загружаем ... ') )
fetch('https://randomuser.me/api') }
.then(responce => responce.json())
.then(json => this.setState({ user: json.results[0] })); function MyComponent3() {
}}>Загрузить нового</button> const sum = useMemo(()=> a+b,[a,b]);//Бессмысленное применение и вредное
</>
) //Применение оправдано
} const complexResult = useMemo(()=>{
</div> return heavyMethOperations(largeDataSet);
} },[largeDataSet])
}
function ParentComponent({ items }) {
const [filter, setFilter] = useState('');
const listProps = useMemo(()=>({
items: items.filter(item => item.name.includes(filter)),
onItemClick: id => console.log('Clicked',id),
theme: 'dark'
}),[items,filter]);
return (
<>
<Memoized {...listProps} />
<button onClick={()=>setFilter('Bob')}>Click</button>
</>
)
}
function Memoized(props) {
console.log(props);
return (
<>
<h3 className={props.theme}>Memoized</h3>
{props.items.map((item) => (
<>
<li>
{item.name}
</li>
</>))}
</>
)
} }
function App() { function App() {
const [showClock, setShowClock] = React.useState(true);
return ( return (
<> <>
<h1>Домашнее задание: жизненый цикл</h1> {/* Добавьте тестовый контент для проверки */}
<button onClick={()=> setShowClock(!showClock)}> <h1>Hello, React!</h1>
{showClock ? 'Скрыть часы' : 'Показать часы' } <ParentComponent items={[{name:'Alex'},{name:'Bob'}]} />
</button>
{showClock && <RandomUser />}
</> </>
) )
} }