Оптимизирована производительность React компонентов с помощью мемоизации
КРИТИЧНЫЕ КОМПОНЕНТЫ ОПТИМИЗИРОВАНЫ: • AdminDashboard (346 kB) - добавлены React.memo, useCallback, useMemo • SellerStatisticsDashboard (329 kB) - мемоизация кэша и callback функций • CreateSupplyPage (276 kB) - оптимизированы вычисления и обработчики • EmployeesDashboard (268 kB) - мемоизация списков и функций • SalesTab + AdvertisingTab - React.memo обертка ТЕХНИЧЕСКИЕ УЛУЧШЕНИЯ: ✅ React.memo() для предотвращения лишних рендеров ✅ useMemo() для тяжелых вычислений ✅ useCallback() для стабильных ссылок на функции ✅ Мемоизация фильтрации и сортировки списков ✅ Оптимизация пропсов в компонентах-контейнерах РЕЗУЛЬТАТЫ: • Все компоненты успешно компилируются • Линтер проходит без критических ошибок • Сохранена вся функциональность • Улучшена производительность рендеринга • Снижена нагрузка на React дерево 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
@ -11,7 +11,7 @@ const s3Config: S3Config = {
|
||||
secretAccessKey: '9xCOoafisG0aB9lJNvdLO1UuK73fBvMcpHMdijrJ',
|
||||
region: 'ru-1',
|
||||
endpoint: 'https://s3.twcstorage.ru',
|
||||
bucket: '617774af-sfera'
|
||||
bucket: '617774af-sfera',
|
||||
}
|
||||
|
||||
export class S3Service {
|
||||
@ -22,7 +22,7 @@ export class S3Service {
|
||||
// fileType используется для будущей логики разделения по типам файлов
|
||||
const timestamp = Date.now()
|
||||
const key = `avatars/${timestamp}-${fileName}`
|
||||
|
||||
|
||||
return key
|
||||
}
|
||||
|
||||
@ -32,21 +32,20 @@ export class S3Service {
|
||||
const formData = new FormData()
|
||||
formData.append('file', file)
|
||||
formData.append('userId', userId)
|
||||
|
||||
|
||||
// Загружаем через наш API роут
|
||||
const response = await fetch('/api/upload-avatar', {
|
||||
method: 'POST',
|
||||
body: formData
|
||||
body: formData,
|
||||
})
|
||||
|
||||
|
||||
if (!response.ok) {
|
||||
const errorData = await response.json()
|
||||
throw new Error(errorData.error || 'Failed to upload avatar')
|
||||
}
|
||||
|
||||
|
||||
const result = await response.json()
|
||||
return result.url
|
||||
|
||||
} catch (error) {
|
||||
console.error('Error uploading avatar:', error)
|
||||
throw error
|
||||
@ -62,9 +61,9 @@ export class S3Service {
|
||||
await fetch('/api/delete-avatar', {
|
||||
method: 'DELETE',
|
||||
headers: {
|
||||
'Content-Type': 'application/json'
|
||||
'Content-Type': 'application/json',
|
||||
},
|
||||
body: JSON.stringify({ key })
|
||||
body: JSON.stringify({ key }),
|
||||
})
|
||||
} catch (error) {
|
||||
console.error('Error deleting avatar:', error)
|
||||
@ -73,4 +72,4 @@ export class S3Service {
|
||||
}
|
||||
}
|
||||
|
||||
export default S3Service
|
||||
export default S3Service
|
||||
|
Reference in New Issue
Block a user