inflearn logo
강의

Course

Instructor

Applying TypeScript to React while learning while making web games

button 클릭 할 떄 마다 더보기/닫기 에러

854

작성자 없음

0 asked

0

제로초님 안녕하세요.

제가 button 클릭 할 떄마다 더보기/닫기 버튼을 만들어 주었는데.

 

처음에는 5개씩 보이도록 설정 해 주고.

더 보기 버튼을 클릭하면 -> 모든 length 만큼 보이도록 설정 해 주었습니다.

그리고 닫기 버튼을 누르면 -> 처음 5개만 보이도록 설정 해 주었구요.

 

하지만 문제점이 있습니다.

클릭 하면 동작은 합니다. 하지만, 1~2초 있다가 type Error 가 발생합니다.

어디서 잘못 됐는지 잘 모르겠습니다.

 

아 그리고 처음에 5개 이하로 보일 떈 버튼을 안 보이도록 설정 해 주고 싶은데,

어떻게 코드를 작성 해야 할 지 모르겠습니다. 똑같이 setState 를 만들어서 5개 이하로 보이는 것들은 false 를 만들어 안보이도록 설정 해 주면 될 거 같은데 모르겠네요

 

에러 발생 구문 입니다.

TypeError: setVisible(...) is not a function

  46 | 
  47 |    
  48 |    const showMore = () => {
> 49 |        visible === 5 ? (
  50 |          setVisible(ProductDetail.allergies.length)
  51 |        ) (
  52 |           setexpanded(true)

 

// 제가 작성한 코드 입니다. 

 const [visible, setVisible] = useState(5)
    const [expanded, setexpanded ] = useState(false);

    const showMore = () => {
        visible === 5 ? (
           setVisible(ProductDetail.allergies.length)
        ) (
           setexpanded(true)
        ) : ( 
           setVisible(5)
        ) (
            setexpanded(false)
           
        )

  return (

 {ProductDetail && ProductDetail.allergies?.length ? 
                            ProductDetail.allergies.slice(0, visible).map(All => (
                            <li key={All.id}>
         {All.displayText}</li>
                        )) : <li>No information.</li>}
)


    
                    <button type="button" onClick={showMore}>
                        {expanded ? (
                            <span>close</span>
                        ) : (
                            <span>see more</span>
                        )}  
                    </button>
                    

    }




typescript react

Answer 1

0

zerocho

자바스크립트 문법 실수입니다.

삼항 연산자 안에서 함수 두 개를 호출 못 합니다. if문을 쓰세요.

if (visible === 5) {
  setVisible...
  setExpanded...
} else {
  setVisible...
  setExpanded...
}

0

zerocho

jsx 부분을 빼면 리액트도 자바스크립트입니다. 자바스크립트 문법대로 코딩하세요.

0

minsu

만약에 visible 이 5 개 이하로 있어서 button 을 안보이게 설정 하도록 할려면 어떻게 코드를 작성 해야 할까요??

0

zerocho

기초 강좌를 다시 보고 오셔야 할 것 같습니다.

0

minsu

javascript 기초가 많이 부족한 가요?

나름 es6 문법이나 왠만하면 다 아는 거 같은데.

javascript 로 연산을 많이 안 해봐서 계속 막히는 거 같은데.. 잘 모르겠네요.

제 생각에는 javascript 로 알고리즘 많이 풀어보면 좋아 질 거 같기도 하고 

제로초님 어떻게 생각하십니까

 

visible > = 4  까지 면 null 값을 사용해 안보이도록 했는데.

렌더링 시 button 이 없어지는 것이 아니라 클릭해야 null 값을 받고 버튼이 사라지네요 

useEffect 에서 관리를 해 줘야 하나 

          <ButtonBox>
                                {
                          visible >= 4  ?
                    <button type="button" onClick={showMore}>
                        {expanded ? (
                            <div><span>닫기</span><img src={Vector190}/></div>
                        ) : (
                            <div><span>더보기</span><img src={Vector189}/></div>
                        )}  
                    </button>
                            : null
                        }
                         </ButtonBox>

0

zerocho

visible 첫 값이 5라서 그럽니다. 왜 첫 값이 5인가요?

0

minsu

slice 함수를 이용해 처음에는 0에서 부터 5개만 보이게 하고 

visible 이 5개로 보인다?

그러면  setVisible(ProductDetail.allergies.length

length 길이 만큼 모두다 출력 되도록 만들었습니다.

0

zerocho

visible이 5개 미만으로 가는 때는 언제인가요? ProductDetail.allergies.length가 5개 미만일 때밖에 없어보이는데요. 애초에 ProductDetail.allergies.length가 5개 미만일 때는 visible 값을 그걸로 설정하면 되지 않을까요?

0

minsu

<ButtonBox>
                               
                          { visible < ProductDetail.allergies?.length
                        ?  <button type="button" onClick={showMore}>
                        {expanded
                        ? (<div><span>닫기</span><img src={Vector190}/></div>)
                        : (<div><span>더보기</span><img src={Vector189}/></div>)
                        }  
                          </button>
                            : null
                        }
         </ButtonBox>

0

minsu

해결 했습니다. 

감사합니다.

제가  프론트 입문 한지 1년차 인데 부족한 게 많은 거 같습니다.

저도 언젠간 열심히 하다보면 제로초님 같은 멘토님이 되길..

항상 감사합니다

express response 타입

0

210

1

createRoot

0

285

1

babel-loader질문입니다! 왜쓰는지 궁금합니다!

0

685

1

undefined 처리

0

493

1

compilerOptions lib 관련

0

329

1

event type 찾기

0

324

1

정확한 type vs 가독성

0

292

1

useRef에 대해 질문드립니다.

0

305

1

tsx파일에서 에러 표시

0

863

1

Props type 질문드립니다.

0

227

1

webpack.config.ts/ Could not find a declaration file for module '@pmmmwh/react-refresh-webpack-plugin'.

0

589

1

18버전에서의 ReactDOM.render

1

658

1

깃허브에 react-router@6 업데이트 해주신 코드 질문드립니다.

0

293

1

2강 끝말잇기 npx webpack 오류가 질의사항

0

408

1

Property 'render' does not exist on type 'IntrinsicAttributes & (PathRouteProps | LayoutRouteProps | IndexRouteProps)'.

0

716

1

webpack.config.ts import 할 때 에러좀 봐주세요!!

0

307

1

React.FC에 대해 궁금합니다.

0

701

1

가위바위보 interval 타입과 이벤트타입에 관한질문

0

343

1

npm run dev 실행은 성공적으로 되는데

0

677

2

redux 유료강좌를 듣고 와야 되는지 여쭈어보려고 합니다.

0

320

1

git 내용과 강의 내용이 달라서 여쭈어봅니다.

0

220

1

Ball.tsx 타이핑

0

322

2

react-router 버젼 업그레이드 변경사항 문의

0

285

2

리액트 타입스크립트 공식문서

0

337

1