Web/React & Next.js

컴포넌트 반복

코딩은 내 밥줄 2022. 4. 4. 22:44
    const IterationSample = () => {

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

    }
    
export default IterationSample;

컴포넌트 배열, key 설정

import { 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); //초기값

        const onChange = e => setinputText(e.target.value);
        
        const onClick = () => {

            const nextNames =names.concat({
                id: nextId,
                text: inputText
            });
            
            setnextId(nextId+1);
            setNames(nextNames);
            setinputText('');
        }

        //const names= ['눈사람', '얼음', '눈' , '바람'];
        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;

input에 입력하면 li가 추가되는 기능 추가

import { 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); //초기값

        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 names= ['눈사람', '얼음', '눈' , '바람'];
        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;

li 제거 기능 추가