[react] map

Published: by Creative Commons Licence

반복문, map

import TodoItem from './TodoItem';
import { setStore } from './store';


export default function Todos({ todos, handleTodosState }) {
  const todoList = todos.map(item => {
    return (
      <TodoItem todo={item} customUpdate={update} customDelete={deleteItem} key={item.seq} /> // map() 호출 안쪽에 꼭 key 추가해야함.
    )
  });

  function update() {
    setStore(todos)
    handleTodosState()
  }
  function deleteItem(targetSeq) {
    setStore(todos.filter(e => e.seq !== targetSeq));
    handleTodosState()
  }

  /**
   * 반복문은 array.map()을 이용해 item을 하나씩 꺼내 세팅하는 방법을 사용한다. 
   * 
   * react-jsx-dev-runtime.development.js:87 Warning: Each child in a list should have a unique "key" prop.
   * 반복문을 사용할땐 key가 필요 
   * 나의 문제는 <li key={seq}></li> 부분을  별도 컴포넌트로 만들고 key를 유니크한 값으로 전달했지만 계속 위 오류가 나왔음 
   * <li>태그에 key를 넣어야 하는 것이 아닌 map() 내부의 어떠한 JSX 요소라도 거기에 key가 있어야 함. 
   * (JSX elements directly inside a map() call always need keys!)
   * 위 소스와 같이 map() 안에 key가 꼭 있어야 함 
   */

  return (
    <ul className="todo-list">
      {todoList}
    </ul>
  );
}