Immer사용방법
터미널에서 Immer 다운로드
yarn add immer use-immer
코드내부 모듈 import 해주기
import { useImmer } from 'use-immer';
Immer로 작성한 코드
import React, { useState } from 'react';
import { useImmer } from 'use-immer';
export default function AppMentorsImmer() {
const [person, updatePerson] = useImmer(initialPerson);
const handleUpdate = () => {
const prev = prompt(`누구의 이름을 바꾸고 싶은가요?`);
const current = prompt(`이름을 무엇으로 바꾸고 싶은가요?`);
updatePerson((person) => {
const mentor = person.mentors.find((m) => m.name === prev);
mentor.name = current;
});
};
const handleAdd = () => {
const name = prompt(`멘토의 이름은?`);
const title = prompt(`멘토의 직함은?`);
updatePerson((person) => person.mentors.push({ name, title }));
};
const handleDelete = () => {
const name = prompt(`누구를 삭제하고 싶은가요?`);
updatePerson((person) => {
const index = person.mentors.findIndex((m) => m.name === name);
person.mentors.splice(index, 1);
});
};
return (
<div>
<h1>
{person.name}는 {person.title}
</h1>
<p>{person.name}의 멘토는:</p>
<ul>
{person.mentors.map((mentor, index) => (
<li key={index}>
{mentor.name} ({mentor.title})
</li>
))}
</ul>
<button onClick={handleUpdate}>멘토의 이름을 바꾸기</button>
<button onClick={handleAdd}>멘토 추가하기</button>
<button onClick={handleDelete}>멘토 삭제하기</button>
</div>
);
}
const initialPerson = {
name: '엘리',
title: '개발자',
mentors: [
{
name: '밥',
title: '시니어개발자',
},
{
name: '제임스',
title: '시니어개발자',
},
],
};
'React(Docs) > React(Practice)' 카테고리의 다른 글
AppTheme_Context API (0) | 2022.12.15 |
---|---|
AppForm_Form을 React에서 다루는 방법 (0) | 2022.12.14 |
AppMentors_useReducer(구조분해할당) (0) | 2022.12.12 |
AppMentors_추가/삭제(filter, spread연산자, key) (0) | 2022.12.11 |
AppMentors_배열상태 관리(불변성, map, spread연산자) (0) | 2022.12.11 |