Я думаю, что лучший способ добиться того, что вам нужно, - это использовать css ключевые кадры :
import { css, keyframes } from 'styled-components';
const openKeyframe = keyframes`
50% {
transform: translateY(7.5px) rotate(0);
}
100% {
transform: translateY(7.5px) rotate(45deg);
}
`;
const openAnimation = css`
animation: 1s linear ${openKeyframe} forwards;
`;
const Component = styled.div`
:first-child {
${({ open }) => open && openAnimation}
}
`;
forwards
ключевое слово сохранит ваш компонент в конечном состоянии анимации когда он будет закончен, что, я полагаю, это то, что вы ищете, если вам нужно сохранить состояние open
.