Open3

Reactのコード添削

pontaponta

問題

タスクの追加・削除機能をもつTodoリストの作成
https://www.greatfrontend.com/questions/user-interface/todo-list/react

コード

export function ItemList({ listItems, handelDelete }) {
  return listItems.map((item) => (
    <li key={item.key}>
      <span>{item.memoContent}</span>
      <button onClick={() => handelDelete(item.key)}>Delete</button>
    </li>
  ));
}

export default function App() {
  const listItemsInitial = [
    { key: 1, memoContent: 'Walk the dog' },
    { key: 2, memoContent: 'Water the plants' },
    { key: 3, memoContent: 'Wash the dishes' },
  ];

  const [inputValue, setInputValue] = useState('');
  const [listItems, setListItems] = useState(listItemsInitial);

  const handelInputChange = (e) => {
    setInputValue(e.target.value);
  };

  const handelDelete = (key) => {
    setListItems((prevItems) => prevItems.filter((item) => item.key !== key));
    console.log(listItems);
  };

  const handleSubmit = () => {
    setListItems((prevItems) => [
      ...prevItems,
      {
        key: listItems.length + 1,
        memoContent: inputValue,
      },
    ]);
    setInputValue('');
  };

  return (
    <div>
      <h1>Todo List</h1>
      <div>
        <input
          type="text"
          placeholder="Add your task"
          value={inputValue}
          onChange={handelInputChange}
        />
        <div>
          <button
            onClick={handleSubmit}
            disabled={inputValue === ''}
          >
            Submit
          </button>
        </div>
      </div>
      <ul>{ItemList({ listItems, handelDelete })}</ul>
    </div>
  );
}
pontaponta

コメント

  • Use Code Spell Checker to reduce typo

  • ItemList: Use functional component when you define some UI elements

    • Define ItemList as functional component (not as regular function), which is more idiomatic in React
    const ItemList = ({ listItems, handleDelete }) => (
      listItems.map((item) => (
        <li key={item.key}>
          <span>{item.memoContent}</span>
          <button onClick={() => handleDelete(item.key)}>Delete</button>
        </li>
      ))
    );
    
    export default function App() {
      ...existing codes
      
      return (
    		...
          <ul>
    	      <ItemList listItems={listItems} handelDelete={handleDelete} />
          </ul>
        ...
      );
    }