테스트 사이트 - 개발 중인 베타 버전입니다

리액트 setstate에서 prev가 왜 업데이트가 안될까요? 채택완료

루2 3년 전 조회 2,205

</p>

<p>        <button

          type="button"

          name="addCard"

          data-index={index}

          onClick={(e) => {

            TotalToggle(e);

          }}

        ></p>

<p> </p>

<p>//element</p>

<p>-------------------------------------------------------------------</p>

<p>//js</p>

<p>  const [toggle, setToggle] = useState({</p>

<p>    toggleArray: [],</p>

<p>    conToggle: [],</p>

<p>    addCard: [],</p>

<p>  });</p>

<p> </p>

<p>  function TotalToggle(e) {</p>

<p>    const target = parseInt(e.currentTarget.getAttribute("data-index"));</p>

<p>    const typeName = e.currentTarget.name;</p>

<p>    if (!toggle[typeName].includes(target)) {</p>

<p>      setToggle((prev) => {</p>

<p>        return {</p>

<p>          [typeName]: [...prev[typeName], target],</p>

<p>        };</p>

<p>      });</p>

<p>    }</p>

<p>  }</p>

<p> </p>

<p>

 

안녕하세요 리액트에서 버튼이 1~5번까지 있다는 가정 누를 때 마다

버튼의 index 0~5를 차례대로 넣을 예정입니다. 근데 함수를 실행 할 시 

[1,2,3,4,5] 처럼 되야하는데 [0]>[1]>[2] 이렇게 되서 

consolelog(prev[typeName])를 해보니 빈 배열이 뜨더라구여,,, 왜이러는걸까요..

댓글을 작성하려면 로그인이 필요합니다.

답변 1개

채택된 답변
+20 포인트
3년 전
setToggle((prev) => {
        return {
          [typeName]: [...prev[typeName], target],
        };
      });
이 부분에 return은 들어갈 이유가 없을것 같네요.
setToggle((prev)=>{
[typeName]: [...prev[typeName], target],
};
로그인 후 평가할 수 있습니다

댓글을 작성하려면 로그인이 필요합니다.

답변을 작성하려면 로그인이 필요합니다.

로그인