I’m trying to make a button now. If I keep clicking the button using onClick function and state, I want to see the two buttons alternately. But it’s applied at first, but the button isn’t applied after second. Button’s code is the same, but I don’t know why it works only once. I’d appreciate it if you give an advice Thanks!!
import React, { useEffect, useState } from 'react' import styled from 'styled-components'; const Body3LeftStart = styled.div` flex-basis: 66.66666667% !important; max-width: 66.66666667%; box-sizing: border-box; flex: 0 0 auto; padding-left: 8px; padding-right: 8px; ` const Body3LeftSection = styled.div` margin-bottom: 8px; font-size: 1rem; font-weight: 400; line-height: 1.5; color: #000a12; box-sizing: border-box; font-family: Pretendard,-apple-system,BlinkMacSystemFont,system-ui,Roboto,Helvetica Neue,Segoe UI,Apple SD Gothic Neo,Noto Sans KR,Malgun Gothic,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,sans-serif; #Body3Section1 { display: flex; align-items: flex-end; margin-bottom: 8px; } ` const Body3LeftSection2 = styled.div` display: flex; margin-bottom: 20px; align-items: flex-end; #Body3LeftSection2Text { font-weight: 400; line-height: 1.47; letter-spacing: -.3px; font-size: 15px; margin-right: 12px; color: #495057; word-break: keep-all; } #Body3LeftSection2Button { border-color: #d5dbe2; color: #495057; background-color: #fff; flex-shrink: 0; margin-left: auto; border: 1px solid; position: relative; display: inline-flex; align-items: center; justify-content: center; border-radius: 4px; font-weight: 500; cursor: pointer; -webkit-appearance: none; padding: 0 12px; height: 40px; line-height: 1.43; font-size: 14px; letter-spacing: -.3px; } ` function Body3Left() { const [isCheckAll, setCheckAll] = useState(true) function handleState (e) { setCheckAll(isCheckAll===false) } function noHandleState (e) { setCheckAll(isCheckAll===true) } return ( <Body3LeftStart> <Body3LeftSection> <Body3LeftSection2> <span id='Body3LeftSection2Text'> 이 강의는 영상, 수업 노트가 제공됩니다. 미리보기를 통해 콘텐츠를 확인해보세요. </span> <button onClick={handleState} style={{display:isCheckAll===false?'none':'block'}} id='Body3LeftSection2Button'> 모두 접기 </button> <button onClick={noHandleState} style={{display:isCheckAll===true?'none':'block'}} id='Body3LeftSection2Button'> 모두 펼치기 </button> </Body3LeftSection2> </Body3LeftSection> </Body3LeftStart> ) } export default Body3Left;
Advertisement
Answer
you update state function in wrong way
you should update is as this way:
setCheckAll(pre => !pre)