[英]React - How to make react-icon rotate 180 degrees onClick?
我有一个名为 Collapsible 的 React 组件,其中包含一个名为 FaArrowDown 的反应图标。 每次用户点击时,如何让图标旋转 180 度? 我已经尝试使用 state 让它旋转但没有成功。 这是 Collapsible.js 的内容:
import React, { useState } from "react";
import styled from "styled-components";
import { FaArrowDown } from "react-icons/fa";
import './Collapsible.css'
export const ButtonWrapper = styled.div`
font-size: 25px;
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
padding-bottom: 25px;
//transform: rotateX(180deg);
&:hover {
font-size: 30px;
}
`
const Collapsible = (props) => {
const [isOpen, setIsOpen] = useState(false);
return (
<div className="collapsible">
<ButtonWrapper className="toggle" >
<h3 className="my_header" style={{paddingBottom: 25, fontSize: '20px', cursor: "pointer"}} >Best foods</h3>
<FaArrowDown onClick={() => setIsOpen(!isOpen)} style={{cursor: "pointer", transition: "all 0.2s linear"}} />
</ButtonWrapper>
<div className={isOpen ? "content show" : "content"}>{props.children}</div>
</div>
);
};
export default Collapsible;
您可以使用样式组件包装您的图标并使用 css 转换:
// Wrap FaIcon in styled component
const StyledIcon = styled((props) => {
<FaArrowDown {...props} />
})`
cursor: pointer;
transition: transform 0.3s ease-out;
${props => props.active && css`
transform: rotate(180deg);
`}
`;
// And use it like:
<StyledIcon onClick={() => setActive(!isOpen)} active={isOpen} />
您可以使用 styled-components 设置图标的样式,只需像这样styled(FaArrowDown)将其传递给样式化的 function ,然后在单击 ButtonWrapper 时有条件地旋转图标。 我们跟踪打开的 state 并将其作为道具传递给我们的切换图标。 我们的代码将如下所示:
Collapsible.styled.js
import styled from "styled-components";
import { FaArrowDown } from "react-icons/fa";
export const ButtonWrapper = styled.div`
font-size: 25px;
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
padding-bottom: 25px;
&:hover {
font-size: 30px;
}
`
export const ToggleIcon = styled(FaArrowDown).attrs(
(props) => ({})
)`
color: rgb(77, 77, 77);
font-size: 30px;
position: relative;
cursor: pointer;
transition: transform 0.25s ease 0s;
//Rotate the icon if active is true, that is when the icon is open
${(props) =>
props.active &&
`
transform: rotate(180deg);
`}
`;
可折叠.js
import React, { useState } from "react";
import { ButtonWrapper, ToggleIcon } from "./Collapsible.styled"
const Collapsible = (props) => {
const [isOpen, setIsOpen] = useState(false);
return (
<div className="collapsible">
<ButtonWrapper className="toggle" onClick={() => setIsOpen(!isOpen)}>
<h3 className="my_header" style={{paddingBottom: 25, fontSize: '20px', cursor: "pointer"}}>Best foods</h3>
<ToggleIcon active={isOpen} />
</ButtonWrapper>
<div className={isOpen ? "content show" : "content"}>{props.children}</div>
</div>
);
};
export default Collapsible;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.