Добро пожаловать в Telegram-канал Ивана Акулова про разработку! Если вы интересуетесь JavaScript, React, веб-перформансом, разработкой и архитектурой, то вы попали по адресу. В этом канале вы найдете полезные советы, инсайты, рекомендации и обсуждения о современных технологиях и лучших практиках в разработке. Иван Акулов - эксперт в данной области, который делится своим опытом и знаниями с подписчиками канала. Вы также можете следить за Иваном на Twitter по ссылке: https://twitter.com/iamakulov. Если у вас есть вопросы или предложения, обращайтесь к Ивану лично через Telegram: @iamakulov. Также присоединяйтесь к чату канала, чтобы обсудить темы, поделиться своим опытом и узнать что-то новое у единомышленников. Развивайтесь вместе с Иваном Акуловым и его каналом про разработку!
28 Feb, 10:27
28 Feb, 10:27
28 Feb, 10:27
28 Feb, 10:27
28 Feb, 10:27
28 Feb, 10:27
04 Mar, 14:11
04 Mar, 14:11
04 Mar, 14:11
13 Jan, 15:06
13 Jan, 15:06
const pokemon = {
ownerId: 557,
details: { kind: 'Pikachu' }
, evolutionHistory: []
}
kind
и evolutionHistory
. В обычном JS это будет выглядеть длинно:const evolvedPokemon = {
...pokemon,
details: {
...pokemon.details,
kind: 'Raichu',
},
evolutionHistory: [
...evolutionHistory,
{ from: 'Pikachu', evolvedAt: new Date() }
]
}
const evolvedPokemon = immer.produce(pokemon, draft => {
draft.details.kind = 'Raichu'
draft.evolutionHistory.push({ from: 'Pikachu', evolvedAt: new Date() })
})
13 Jan, 15:06
userReducer
с картинки выше и вызвать его с таким экшеном:const user = { id: 123, status: { kind: 'online' } }
const action = {
type: 'UPDATE_USER_STATUS',
payload: { statusKind: 'online' }
}
const newUser = userReducer(user, action)
console.log(newUser === user) // → true
user
и user.status
поменяются три раза. Если в приложении есть компоненты, подписанные на эти объекты, то эти компоненты тоже перерендерятся три раза.user
и user.status
поменяются максимум один раз. Компоненты, подписанные на них, тоже перерендерятся один раз.13 Jan, 15:06
13 Jan, 15:06
05 Jan, 01:55
useTransition()
(с демкой в девтулзах и просмотром кода из React-а, да)<Suspense>
, чтобы ускорить гидрацию, и как его не применять16 Dec, 17:50
<img srcset>
— это фича, с помощью которой браузер может выбрать подходящую картинку для устройства. Например, вот этот код:<img srcset="/500.jpg 500w, /1000.jpg 1000w, /1500.jpg 1500w" sizes="500px">
sizes
. Без sizes
браузер будет считать, что картинка — шириной во всё окно браузера. Из-за этого будет загружаться слишком большой файл.sizes
прописать сложно. Если на десктопе картинка шириной в 500 пикселей, а на мобильном — в 80% экрана, атрибут придётся сделать таким: sizes="(min-width: 768px) 500px, 80vw"
. Если условий больше, то атрибут будет ещё сложнее.<img sizes="auto">
. С таким атрибутом браузер будет рассчитывать ширину автоматически; сложные условия в sizes
больше прописывать будет не нужно.loading="lazy"
.srcset
) без CSSloading="lazy"
. (Это из-за технических причин — без стилей браузер не может понять, во вьюпорте ли картинка и нужно ли её скачивать.) Поэтому и оптимизируются только они.01 Dec, 12:49