3 回答
TA贡献1829条经验 获得超13个赞
从技术上讲,rotate
它已经是一个布尔值,所以也prevState
应该是一个布尔值。您还试图将对象设置为rotate
state 值而不是简单的boolean。
基于此,您只需要否定prevState
而不是prevState.rotate
:
setRotate(prevState => !prevState)
TA贡献1735条经验 获得超5个赞
问题是通过将代码更改handleClick为:
import React, { useState } from "react";
import ReactDOM from "react-dom";
import styled from "styled-components";
import "./styles.css";
const IconButton = () => <button>Icon</button>;
const IconButtonWrapper = styled.div`
transform: rotate(0deg);
overflow: hidden;
transition: all 0.3s ease-out;
${({ rotate }) => rotate && `transform: rotate(360deg)`};
`;
const IconButtonContainer = () => {
const [rotate, setRotate] = useState(false);
const handleClick = () => setRotate((prevState) => (!prevState ));
return (
<IconButtonWrapper rotate={rotate} onClick={handleClick}>
<IconButton />
</IconButtonWrapper>
);
};
function App() {
return (
<div className="App">
<IconButtonContainer />
</div>
);
}
const rootElement = document.getElementById("root");
ReactDOM.render(<App />, rootElement);
prevState已经有最新的价值,rotate但你正在把它转换成一个对象。setRotate((prevState) => (!prevState ));会做。
添加回答
举报