[TIL] 220126

Lee SyongΒ·2022λ…„ 1μ›” 26일
0

TIL

λͺ©λ‘ 보기
161/204
post-thumbnail

πŸ“ 였늘 ν•œ 것

  1. this / Big O notation / linked list

  2. React둜 to do list λ§Œλ“€κΈ°


πŸ“š 배운 것

this / Big O notation / linked list κ³Όμ œλŠ” private 폴더 μ°Έκ³ 

1. PRACTICE

1) React둜 to do list λ§Œλ“€κΈ°

(1) todo state (ν•  일)

input의 value 값을 μ™ΈλΆ€μ—μ„œ μ‚¬μš©ν•  수 μžˆλ„λ‘ todo state에 λ‹΄μ•˜λ‹€.

import { useState } from "react";

function App() {
  const [todo, setTodo] = useState("");
  const onChange = (event) => setTodo(event.target.value);

  return (
    <div>
      <h1>ν•  일 λͺ©λ‘</h1>
      <form>
        <input
          value={todo}
          onChange={onChange}
          placeholder="ν•  일 μž‘μ„±"
          autoFocus
        />
      </form>
    </div>
  );
}

export default App;

(2) todos state (ν•  일 λͺ©λ‘)

form μš”μ†Œ μ•ˆμ— submit button을 μΆ”κ°€ν•˜κ³  form νƒœκ·Έμ— onSubmit 이벀트λ₯Ό λ“±λ‘ν–ˆλ‹€.
submit button을 클릭해 μ œμΆœν•œ todoλ₯Ό 화면에 μ—…λ°μ΄νŠΈν•˜κΈ° μœ„ν•΄ todos stateλ₯Ό μΆ”κ°€ν–ˆλ‹€.

import { useState } from "react";

function App() {
  const [todo, setTodo] = useState("");
  const [todos, setTodos] = useState([]);

  const onChange = (event) => setTodo(event.target.value);
  const onSubmit = (event) => {
    event.preventDefault();
    if (todo === "") return;
    setTodos((prevTodos) => [todo, ...prevTodos]); // = 이전 todos 배열에 ν˜„μž¬ todoλ₯Ό unshift ν•œλ‹€
    setTodo("");
  };

  return (
    <div>
      <h1>ν•  일 λͺ©λ‘({todos.length})</h1>
      <form onSubmit={onSubmit}>
        // μ€‘λž΅
        <button type="submit">μΆ”κ°€</button>
      </form>
    </div>
  );
}

export default App;

(3) to do list μ—…λ°μ΄νŠΈ

submit button을 ν΄λ¦­ν•˜μ—¬ todos 배열에 ν˜„μž¬ todoκ°€ μΆ”κ°€λ˜μ–΄ todos stateκ°€ λ³€ν•˜λ©΄ App μ»΄ν¬λ„ŒνŠΈκ°€ λ¦¬λ Œλ”λ§ λœλ‹€.
이λ₯Ό μ΄μš©ν•΄ 전체 ν•  일 λͺ©λ‘μ„ 화면에 μ—…λ°μ΄νŠΈ ν•  수 μžˆλ‹€.

ν˜„μž¬ todos의 λ°°μ—΄ μ•ˆμ—λŠ” todoλ“€, 즉 text듀이 item으둜 λ“€μ–΄ μžˆλ‹€.
화면에 이λ₯Ό 보여주기 μœ„ν•΄μ„œλŠ” κ·Έ item듀을 li νƒœκ·Έ μ•ˆμ— 집어넣은 ν›„ 이λ₯Ό λ Œλ”λ§ν•΄μ•Ό ν•œλ‹€.

todos stateκ°€ λ³€ν•  λ•Œλ§ˆλ‹€(App μ»΄ν¬λ„ŒνŠΈκ°€ λ¦¬λ Œλ”λ§ 될 λ•Œλ§ˆλ‹€) {μžλ°”μŠ€ν¬λ¦½νŠΈ μ½”λ“œ} μ•ˆμ˜ map()에 μ˜ν•΄ ν•  일 λͺ©λ‘ 전체도 λ¦¬λ Œλ”λ§ λœλ‹€.
map()은 μ›λž˜ 배열을 λ³€ν™˜ν•œ μƒˆλ‘œμš΄ 배열을 return ν•˜κΈ° λ•Œλ¬Έμ— 이λ₯Ό μ΄μš©ν•˜λ©΄ todos λ°°μ—΄μ˜ item(text)λ₯Ό li μš”μ†Œλ‘œ λ°”κΏ€ 수 μžˆλ‹€.

πŸ’‘ Warning: Each child in a list should have a unique "key" prop.

Reactκ°€ 기본적으둜 list에 μžˆλŠ” λͺ¨λ“  item을 μΈμ‹ν•˜κΈ° λ•Œλ¬Έμ— list의 각각의 item에 λŒ€ν•΄μ„œλŠ” κ³ μœ ν•œ key 속성을 λΆ€μ—¬ν•΄μ•Ό ν•œλ‹€.

// μ΅œμ’… μ™„μ„±
import { useState } from "react";

function App() {
  const [todo, setTodo] = useState("");
  const [todos, setTodos] = useState([]);

  const onChange = (event) => setTodo(event.target.value);
  const onSubmit = (event) => {
    event.preventDefault();
    if (todo === "") return;
    setTodos((prevTodos) => [todo, ...prevTodos]);
    setTodo("");
  };

  return (
    <div>
      <h1>ν•  일 λͺ©λ‘({todos.length})</h1>
      <form onSubmit={onSubmit}>
        <input
          value={todo}
          onChange={onChange}
          placeholder="ν•  일 μž‘μ„±"
          autoFocus
        />
        <button type="submit">μΆ”κ°€</button>
      </form>
      <hr />
      <ul> // list의 각각의 item에 λŒ€ν•΄ key 속성을 λΆ€μ—¬ν•΄μ•Ό ν•œλ‹€
        {todos.map((todo, index) => (
          <li key={index}>{todo}</li>
        ))}
      </ul>
    </div>
  );
}

export default App;

✨ 내일 ν•  것

  1. coin tracker
profile
λŠ₯λ™μ μœΌλ‘œ μ‚΄μž, ν–‰λ³΅ν•˜κ²ŒπŸ˜

0개의 λŒ“κΈ€