Develop/React.js

[React] 컴포넌트 반복

dawonny 2021. 7. 18. 02:10
728x90
반응형

이 글은 [리액트를 다루는 기술](저자 김민준, 출판사 길벗) 교재를 보고 공부하며 정리한 글임.


IterationSample.js

import React from 'react';

const IterationSample =()=> {
    return(
        <ul>
            <li>눈사람</li>
            <li>얼음</li>
            <li>눈</li>
            <li>바람</li>
        </ul>
    );
};

코드가 복잡해지면 이렇게 반복되는건 낭비


자바 스크립트 배열 객체의 내장함수인 map함수를 사용하면 반복되는 컴포넌트 렌더링 가능


key는 컴포넌트 배열을 렌더링 했을 때 어떤 원소에 변동이 있었는지 알아내려고 사용

IterationSample.js

import React from 'react';

const IterationSample =()=> {
   const names = ['눈사람', '얼음', '눈', '바람'];
   const nameList = names.map((name, index)=><li key={index}>{name}</li>);
   return <ul>{nameList}</ul>;
};

export default IterationSample;

push 함수는 기존 배열 자체를 변경

concat은 새로운 배열을 만들어준다

IterationSample.js

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('');
   const [nextId, setNextId] = useState(5);//새로운 항목을 추가할 때 사용할 id

   const onChange = e => setInputText(e.target.value);
   const onClick =() => {
       const nextNames = names.concat({
           id: nextId,
           text: inputText
       });
       setNextId(nextId +1);
       setNames(nextNames);
       setInputText('');    
    };
   

   const nameList = names.map(name => <li key={name.id}>{name.text}</li>)
   return (
   <>
   <input value={inputText} onChange={onChange} />
   <button onClick={onClick}>추가</button>
   <ul>{nameList}</ul>;
   </>
   );
};

export default IterationSample;

데이터 제거 기능 구현하기

filter 이용

IterationSample.js

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('');
   const [nextId, setNextId] = useState(5);//새로운 항목을 추가할 때 사용할 id

   const onChange = e => setInputText(e.target.value);
   const onClick =() => {
       const nextNames = names.concat({
           id: nextId,
           text: inputText
       });
       setNextId(nextId +1);
       setNames(nextNames);
       setInputText('');    
    };
   const onRemove = id => {
       const nextNames = names.filter(name => name.id !== id);
       setNames(nextNames);
   };

   const nameList = names.map(name => 
   <li key={name.id} onDoubleClick={()=> onRemove(name.id)}>
       {name.text}</li>)
   return (
   <>
   <input value={inputText} onChange={onChange} />
   <button onClick={onClick}>추가</button>
   <ul>{nameList}</ul>;
   </>
   );
};

export default IterationSample;

 

728x90
반응형