Как заставить Framer Motion анимацию работать после смены пропов компонента?
Один из компонентов (PartSlot) в моем проекте необходимо анимировать только тогда, когда проп isActive = true. Это влияет не только на анимацию, но также на стиль и поведение компонента, и если css и поведение при клике действительно меняются при обновлении пропов, то анимации запускаться отказываются.
С другой стороны, анимации работают отлично, если PartSlot с самого начала рендерится с isActive = true, однако компоненты, которые были созданы с isActive = false, нормально не работают.
В чем может быть проблема?
Код компонента:
|
1 |
function PartSlot({ isActive, iconAddress, computer, partClassName, partName, setOnClick }: PartSlotProps) { return { <motion.div onClick={ isActive ? () => { setOnClick(partClassName) } : undefined } initial = 'tap' whileHover='hover' whileTap= {isMobile ? 'tapMobile' : 'tap'} style={ inactivePartSlotStyle } > <div className='IconMountLower'> <div className='IconMountUpper' style = { inactiveIconHolderStyle }> <motion.img src={iconAddress} variants={ isActive ? partSlotAnimationVariants : undefined } transition={{ duration: 0.08, ease: easeOut }} /> </div> </div> {/* some more stuff here */} </motion.div> } } |
Отсюда я беру компоненты:
|
1 |
export const predefinedPartSlotList = (isActive: boolean, computer: Computer, onClickPartSlot: (partClassName: PartClassName) => void): Array<ReactElement> => { return [ (<PartSlot key={1} isActive={isActive} iconAddress={MotherboardIcon} partClassName={PartClassName.Motherboard} computer={computer} setOnClick={onClickPartSlot} partName={"Материнская плата"}/>), (<PartSlot key={2} isActive={isActive} iconAddress={FanIcon} partClassName={PartClassName.Case} computer={computer} setOnClick={onClickPartSlot} partName={"Корпус"}/>) // More PartSlots here ] }; |
Дополнительно:
Попробуй так <motion.img key={isActive} ..., хз:)
Для решения данной проблемы вы можете воспользоваться услугами фрилансеров. Мы выполним необходимую работу быстро и качественно.
Оставить комментарий Отменить
Ответы
- Есть ответ! к записи Как уменьшить масштаб меньше 100% в Windows 10 (22H2)
- Есть ответ! к записи Аналоги CloudFlare в России?
- Есть ответ! к записи Аналоги CloudFlare в России?
- Есть ответ! к записи Как называется человек, который дизайн придумает для сайта и сверстает его?
- Есть ответ! к записи Можно ли установить Яндекс.Диск на АльтЛинукс?
- Есть ответ! к записи Картинки мутные только на сафари, есть выход?
- Есть ответ! к записи Keenetic. Как настроить SSTP клиент с сертификатом?
- Есть ответ! к записи Чем заменить executor в aiogram 3?
Для того чтобы заставить Framer Motion анимацию работать после смены пропов компонента, можно воспользоваться хуком useEffect из библиотеки React.
Прежде всего, убедитесь, что у вас установлен Framer Motion. Затем импортируйте необходимые компоненты:
Далее, создайте компонент, в котором будет происходить изменение пропов:
В данном примере, компонент MyComponent принимает проп prop, который меняется с течением времени. С помощью хука useEffect мы следим за изменениями этого пропа и устанавливаем isVisible в true, что позволяет анимации работать.
Не забудьте также добавить стили для анимации в вашем CSS:
Теперь, когда проп компонента изменится, анимация в Framer Motion будет работать корректно после смены пропов.