【发布时间】:2020-10-08 21:07:20
【问题描述】:
我有一个styled-component,它接收道具以确定要使用的动画。这是控制一个箭头图标,当活动时旋转“打开”,非活动时保持“关闭”。
这是styled-component 和两个keyframes 动画的样子:
const rotate_down = keyframes`
from {
transform: rotate(0deg);
}
to {
transform: rotate(90deg);
}
`;
const rotate_up = keyframes`
from {
transform: rotate(90deg);
}
to {
transform: rotate(0deg);
}
`;
const OpenUserSettings = styled.div`
cursor: pointer;
width: 20px;
height: 20px;
transition: 0.3s;
animation: ${props => (props.rotate ? rotate_down : rotate_up)} 0.5s ease
forwards;
margin-top: 2px;
box-sizing: border-box;
display: flex;
justify-content: center;
align-items: center;
& > img {
width: 5px;
}
`
传入的 rotate 属性是一个布尔值,通过 React 组件中的 onClick 处理程序进行切换:
<OpenUserSettings
rotate={arrowDown}
onClick={() => {
this.setState(prevState => ({
arrowDown: !prevState.arrowDown
}));
}}
>
<img src={OpenArrow} alt="menu drop down arrow" />
</OpenUserSettings>
这有效,当点击箭头时,rotate 属性被传递到 OpenUserSettings 并成功在 rotate_up 和 rotate_down keyframes 之间切换。
现在我的问题是,当 React 组件首次挂载时,arrowDown 默认设置为 false,这意味着 rotate 属性将为 false。这会导致styled-component 在第一次安装时将动画设置为rotate_up。我认为这很难想象,所以看看这个看看我在描述什么:
当页面刷新时,您可以看到rotate_up 动画正在快速触发。我需要箭头保持关闭状态,但我不需要 rotate_up 动画在第一次加载以关闭它时触发。这是像react-transition-group 这样的情况,我可以控制初始输入,还是可以用逻辑处理?
【问题讨论】:
标签: javascript css reactjs styled-components