const todoList = () => {
const [todos,setTodos] = useState([]);
const addTodo = (value) => {
setTodos([...todos,{id:Date.now(),value,complate: true}])
}
const handleToggleTodo = () => {
setTodos(todos.map(todo=> todo.id !==id ? todo : {...todo,complate: !todo.complate}))
}
const deleteTodo = (id) => {
setTodos(todos.filter(todo=> todo.id !==id))
}
return (
<div>
<TodoInput addTodo={addTodo}/>
{todos.map((todo,index)=> {
<TodoItem key={index} handleToggleTodo={handleToggleTodo} deleteTodo ={deleteTodo} todo={todo}/>
})}
</div>
)
}
const TodoInput = ({addTodo}) => {
const [value,setValue] = useState('');
const handleInputValue = (e) => {
setValue(e.target.value);
}
const handleAddTodo = () => {
if(value.trim() !=='') {
addTodo(value);
setValue('')
}
}
return (
<div>
<input type='text' value={value} onChange={handleInputValue}/>
<button onClick={handleAddTodo}>添加</button>
</div>
)
}
const TodoItem = ({handleToggleTodo,deleteTodo,todo}) => {
return(
<div>
<span style={{textDecoration: todo.complate? 'line-through': 'none'}}>
{todo.value}
</span>
<input type='checkbox' disabled={todo.complate} onChange={()=> handleToggleTodo(todo.id)}/>
<button onClick={deleteTodo(todo.id)}>删除</button>
</div>
)
}
const TodoList = () => {
const [todos, setTodos] = useState([]);
const addTodo = (value) => {
setTodos([...todos,{id:Date.now(),value,complate: true}])
}
const handleToggle = () => {
setTodos(todos.map(todo=> todo.id !==id ? todo : {...todo,complate: !todo.complate}))
}
const deleteTodo = () => {
setTodos(todos.filter(todo=> todo.id !==id))
}
return(
<View>
<TodoInput addTodo={addTodo}/>
<FlatList data={todos} renderItems={({item})=> (
<TodoItem item={item} handleToggle={handleToggle} deleteTodo={deleteTodo}/>
)}
keyExtractor={item => item.id.toString()}
/>
</View>
)
}
const TodoInput = ({addTodo}) => {
const [inputText, setInputText] = useState('');
const addInputText = () => {
if(inputText.trim()!=='') {
addTodo(inputText)
}
}
return (
<View>
<TextInput value={inputText} onChangeText={setInputText}/>
<Button title='add' onPress={addInputText}/>
</View>
)
}
const TodoItem = ({item,handleToggle,deleteTodo}) => {
return(
<View>
<Text onPress={()=> handleToggle(item.id)}>{item.value}</Text>
<Button title='delete' onPress={()=> deleteTodo(item.id)}></Button>
</View>
)
}