Compare commits

..

3 Commits

Author SHA1 Message Date
laktionov-as 8cc72afd7b final 2026-05-28 19:16:14 +03:00
laktionov-as a520406547 useCallback with React.memo 2026-05-26 21:28:43 +03:00
laktionov-as 38f7195ed4 useCallback 2026-05-26 21:17:42 +03:00
2 changed files with 32 additions and 33 deletions
+32 -31
View File
@@ -1,33 +1,34 @@
import { useMutation, QueryClientProvider, QueryClient } from '@tanstack/react-query' import React, { useMemo, useCallback, useState } from 'react'
import PostAddForm from './components/PostAddForm'
/* const TodoItem = React.memo(({ item, onToggle, onDelete }) => {
const mutation = useMutation({ console.log(`rendred ${item.id}`);
mutationFn: newUser => { return <li>
fetch('https://jsonplaceholder.typicode.com/users', { {item.name}
method: 'GET', <button onClick={() => onToggle(item.id)}>Done</button>
headers: {'Content-type':'application/json'}, <button onClick={() => onDelete(item.id)}>remove</button>
body: JSON.stringify(newUser), </li>
}).then(res => res.json())
}
}) })
*/
const createQueryClient = () => { function ItemList({ items }) {
new QueryClient({
defaultOptions: { const handleToggle = useCallback(id => {
queries: { items.done = true;
staleTime: 5 * 60*1000, console.log(`Item ${id} done`)
retry: 1, console.log(id)
gcTime: 10*60*1000, },[]);
refetchOnWindowFocus: false,
}, const handleDelete = useCallback(id => {
mutations: { items.pop(id);
retry:0, },[]);
onError: error => {console.error('Mutation error:',error.message)} return (
} <>
} <h3>List items</h3>
}) {items.map(item => (
<TodoItem key={item.id} item={item}
onToggle={handleToggle} onDelete={handleDelete} />
))}
</>
)
} }
function App() { function App() {
@@ -35,10 +36,10 @@ function App() {
<> <>
{/* Добавьте тестовый контент для проверки */} {/* Добавьте тестовый контент для проверки */}
<h1>Hello, React!</h1> <h1>Hello, React!</h1>
<QueryClientProvider client={createQueryClient}> <ItemList items={[
<PostAddForm /> {id:1,name:'Первый',done:false},
</QueryClientProvider> {id:2,name:'Второй',done:false}
]} />
</> </>
) )
} }
-2
View File
@@ -4,7 +4,5 @@ import { createRoot } from 'react-dom/client'
import App from './App.jsx' import App from './App.jsx'
createRoot(document.getElementById('root')).render( createRoot(document.getElementById('root')).render(
<StrictMode>
<App /> <App />
</StrictMode>
) )