클라우드 스쿨

React

qqlzzb 2023. 6. 12. 16:46

버튼을 누르면 moon 이라고 적혀있던 버튼이 lee로 바뀌도록 함수를 구현했는데

state 객체의 값이 변경되어도 화면이 갱신되지 않는다.

import { useState } from "react" ; 

export default function Hello() {
   const [user, setUser] = useState({id:1,name:"moon"}) ;
   function test(){
      user.name="lee"; 
      setUser(user);
   }
   return (
      <button onClick={test}>{user.name} </button>
   )
}

버튼을 누르면 test 함수가 실행되어서 user.name을 lee로 바꾸고

그것이 화면에 갱신이 되어야 하는데 버튼을 눌러도 그대로 변하지 않는다.

 

그 이유는 객체는 주소를 저장하기 때문이다.

주소가 가리키는 곳에서는 name이 변했지만 주소가 그대로이기 때문에

setUser 입장에서는 변한 것이 없으므로, 화면을 refresh 하지 않는다.

변경하고 싶다면 객체를 새로 만들어야 한다.

 

import { useState } from "react" ; 

export default function Hello() {
   const [user, setUser] = useState({id:1,name:"moon"}) ;
   function test(){
      user.name="lee"; 
      let NewUser = {...user, name:"lee"};  //새로운 객체 생성
      setUser(NewUser); 

   }
   return (
      <button onClick={test}>{user.name} </button>
   )
}

그 결과 moon 이라고 적힌 버튼을 클릭하면 lee라고 적힌 버튼으로 갱신된다.

 

 

 

 

 

'클라우드 스쿨' 카테고리의 다른 글

HTML / CSS  (0) 2023.07.06
Database(트랜잭션/DW/OLTP/SQL/NoSQL)  (0) 2023.06.30
React - ref 객체 alert으로 출력  (0) 2023.06.11
CSS - 선택자  (0) 2023.05.21
HTML - 폼  (0) 2023.05.21