// @flow import React, { Fragment, useCallback, useState } from 'react'; import ListItem from './ListItem'; import styles from './List.css'; export type Item = {| id: number, isComplete: boolean, text: string, |}; type Props = {||}; export default function List(props: Props) { const [newItemText, setNewItemText] = useState(''); const [items, setItems] = useState>([ { id: 1, isComplete: true, text: 'First' }, { id: 2, isComplete: true, text: 'Second' }, { id: 3, isComplete: false, text: 'Third' }, ]); const [uid, setUID] = useState(4); const handleClick = useCallback(() => { if (newItemText !== '') { setItems([ ...items, { id: uid, isComplete: false, text: newItemText, }, ]); setUID(uid + 1); setNewItemText(''); } }, [newItemText, items, uid]); const handleKeyPress = useCallback( event => { if (event.key === 'Enter') { handleClick(); } }, [handleClick] ); const handleChange = useCallback( event => { setNewItemText(event.currentTarget.value); }, [setNewItemText] ); const removeItem = useCallback( itemToRemove => setItems(items.filter(item => item !== itemToRemove)), [items] ); const toggleItem = useCallback( itemToToggle => { const index = items.indexOf(itemToToggle); setItems( items .slice(0, index) .concat({ ...itemToToggle, isComplete: !itemToToggle.isComplete, }) .concat(items.slice(index + 1)) ); }, [items] ); return (

List

    {items.map(item => ( ))}
); }