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 ));會做。
添加回答
舉報