본문 바로가기
react

[React]배열 렌더링하기 실습

by 남민섭 2023. 1. 6.
728x90
반응형

App.js

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
import './App.css';
import IterationSample from './components/IterationSample';
 
function App() {
  return (
    <div className="App">
      <IterationSample/>
    </div>
  );
}
 
export default App;
cs

 

IterationSample.js

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
import React,{useState} from 'react';
 
const IterationSample = () => {
    const [names,setNames] = useState([
        {id:1, text: "눈"},
        {id:2, text: "팥빙수"},
        {id:3, text: "귤"},
        {id:4, text: "붕어빵"}
    ])
    //인풋 상태관리
    const [inputText, setInputText] = useState("");
    //id상태관리
    const [nextId, setNextId] = useState(5);
//디폴트값 5 nextId에 할당
    //버튼 클릭시 실행될 함수
    const onClick = () => {
        const nextNames = [
            ...names,
            {id: nextId, text: inputText}
        ];
        //클릭누를때마다 업데이트
        setNextId(nextId+1); //다음아이디값을 업데이트
        setNames(nextNames); //names배열 업데이트
        setInputText(""); //inputText 비우기
    }
    //함수표현식
    const onChange = (e) => setInputText(e.target.value);
    //항목을 삭제하는 함수
    const onRemove = (id) => {
        const nextNames = names.filter(name=> name.id !== id); 
//id값이 다른얘들은 그대로 있고 같은 얘는 필터로 거름
        setNames(nextNames);
    }
    const namelist = names.map((name, index) =><li key={index}>{name.text} 
    <button onClick={ ()=> onRemove(name.id) }>삭제</button></li>
//map은 키를 지정해줘야함 li안에 key값 지정(index값)
    //삭제키는 전달할 id값이 있기에 함수자체를 {}안에 넣어줘야함
    return (
        <div>
            <input value={inputText} onChange={onChange}/>
<button onClick={onClick}>추가</button>
            <ul>
                {namelist}
            </ul>
        </div>
    );
};
 
export default IterationSample;
cs

 

출력값(추가,삭제)

 

728x90
반응형

댓글