React

[React] 객체 업데이트

주니야 공부하자 2024. 12. 2. 23:03

useState를 사용하여 객체를 업데이트 할 때의 방법입니다.

const [form, setForm] = useState({
  title: '제목',
  description: '설명',
})

const handleInputChange = (e) => {
  setForm({
    ...form,
    [e.target.name]: e.target.value,
  })
}

input이 여러 개여도 해당 방법으로 input의 값을 모두 변경 가능합니다.

 

 

중첩 객체를 업데이트 할 때에는 immer 라이브러리를 사용하면 코드 가독성에 좋습니다.

immer 사용 전

const [form, setForm] = useState({
  title: '제목',
  description: '설명',
  info: {
    level: 1,
    name: 'react',
  }
})

const handleInputChange = (e) => {
  setForm({
    ...form,
    info: {
      ...form.info,
      level: e.target.value,
    },
  })
}

 

immer 사용 후

npm i use-immer
const [form, updateForm] = useImmer({
  title: '제목',
  description: '설명',
  info: {
    level: 1,
    name: 'react',
  }
})

const handleInputChange = (e) => {
  // 일반 객체
  updateForm((draft) => {
    draft[e.target.name]: e.target.value
  })
  
  // 중첩 객체
  updateForm((draft) => {
    draft.info.level = e.target.value
  })
}