๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

Develop Study ๐Ÿ’ป

react study / ๋ฐฐ์—ด ์ž…๋ ฅ / ์ˆ˜์ • / ์‚ญ์ œ

728x90

app.js 

import './App.css';
import React from 'react';
import { useRef } from 'react';
import { useState } from 'react';
import UserList from './UserList';
import CreateUser from './CreateUser'



function App() {

  const [inputs, setInputs] = useState({
    username: '',
    email: ''
  });

  const { username, email } = inputs;

  const onChange = e => {
    const { name, value } = e.target;
    setInputs({
      ...inputs,
      [name]:value
    })
  }

  const [users, setUsers] = useState([
    {
      id: 1,
      username: 'velopert',
      email: 'public.velopert@gmail.com',
      active: false
    },

    {
      id: 2,
      username: 'tester',
      email: 'tester@example.com',
      active: true
    },

    {
      id: 3,
      username: 'liz',
      email: 'liz@example.com',
      active: false
    }
  ]);

  const nextId = useRef(4);

  const onCreate = () => {

    const user = {
      id: nextId.current,
      username,
      email
    }

    //setUsers([...users, user]) //spread์—ฐ์‚ฐ์ž ์‚ฌ์šฉ
    setUsers(users.concat(user)); //concatํ•จ์ˆ˜ ์‚ฌ์šฉ - ๊ธฐ์กด ๋ฐฐ์—ด์ˆ˜์ • x, ์ƒˆ๋กœ์šด ์›์†Œ๊ฐ€ ์ถ”๊ฐ€๋œ ์ƒˆ๋กœ์šด ๋ฐฐ์—ด์„ ๋งŒ๋“ ๋‹ค 


    setInputs({
      username: '',
      email: ''
    });

    nextId.current += 1;
  };

  const onRemove = id => {
    // filter : user.id ๊ฐ€ ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ์ผ์น˜ํ•˜์ง€ ์•Š๋Š” ์›์†Œ๋งŒ ์ถ”์ถœํ•ด์„œ ์ƒˆ๋กœ์šด ๋ฐฐ์—ด์„ ๋งŒ๋“ฌ
    // user.id๊ฐ€ id์ธ๊ฒƒ์„ ์ œ๊ฑฐ

    setUsers(users.filter(user => user.id !== id))
  }

  const onToggle = id => {
    setUsers(
      users.map(user =>
        user.id === id ? { ...user, active: !user.active } : user
      )
    )
  }
 
  return (
    <>
      <CreateUser 
        username={username}
        email={email}
        onChange={onChange}
        onCreate={onCreate}/>
      <UserList users={users} onRemove={onRemove} onToggle={ onToggle }/>
    </>
    
  )
}

export default App;

 

UserList.js

import React from 'react';

function User({ user, onRemove, onToggle }) {
    return (
        <div>
            <b style={{
                cursor: 'pointer',
                color: user.active ? 'green' : 'yellow'
            }}
                onClick={() => onToggle(user.id)}>
                {user.username}
            </b>

            <b> | { user.email }</b>
            <button onClick={() => onRemove(user.id)}> ์‚ญ์ œ </button>
        </div>
    )
}

function UserList({users, onRemove, onToggle}) {

    

    return (
        <div>
            {users.map(user => (
                <User user={user} key={user.id} onRemove={onRemove} onToggle={ onToggle}/> //index = user.id ๋ฐฐ์—ด์„ ํšจ์œจ์ ์œผ๋กœ ์—…๋ฐ์ดํŠธ ํ•˜๊ธฐ ์œ„ํ•ด์„œ 
            ))}
      </div>
    )
}

export default UserList;



 

 

 

๐Ÿ‘‡์ฐธ๊ณ ์„œ!!

react.vlpt.us/basic/09-multiple-inputs.html

 

728x90