这是我的Todolist组件,它包含一个List,以及带有复选框和物料列表和复选框的所有列表项。传递了两个参数:todos和deleteTodo。
const TodoList = ({ todos, deleteTodo}) => {
return (
<List>
{todos.map((todo, index) => (
<ListItem key={index.toString()} dense button>
<Checkbox disableRipple/>
<ListItemText key={index} primary={todo} />
<ListItemSecondaryAction>
<IconButton
aria-label="Delete"
onClick={() => {
deleteTodo(index);
}}
>
<DeleteIcon />
</IconButton>
</ListItemSecondaryAction>
</ListItem>
))}
</List>
);
};我知道如何使用本地存储将待办事项存储为数组,但不知道如何存储复选框值。有没有人能解释一下,这是什么策略?
下面是主要的应用程序:
const initialValue = () => {
const initialArray = localStorage.getItem("todos");
return JSON.parse(initialArray);
};
const [todos, setTodos] = useState(initialValue);
useEffect(() => {
const json = JSON.stringify(todos);
localStorage.setItem("todos", json);
});
return (
<div className="App">
<Typography component="h1" variant="h2">
Todos
</Typography>
<TodoForm
saveTodo={todoText => {
const trimmedText = todoText.trim();
if (trimmedText.length > 0) {
setTodos([...todos, trimmedText]);
}
}}
/>
<TodoList
todos={todos}
deleteTodo={todoIndex => {
const newTodos = todos.filter((_, index) => index !== todoIndex);
setTodos(newTodos);
}}
/>
</div>
);
}; 如果有任何建议或方向,如何解决这个问题,我将不胜感激。Thx
发布于 2019-10-06 18:00:20
一种方法是使用Checkbox component的onChange回调
例如<Checkbox disableRipple onChange={(e)=> onCheckboxChange(e.event.target) /> (以及您需要的任何参数)
并通过一个prop将它向上传递给您的父组件,例如
const TodoList = ({ todos, deleteTodo, onCheckboxChange}) => {
然后可以将该值存储在本地存储中,即父组件。也许有一种更优雅的方法
https://stackoverflow.com/questions/58255767
复制相似问题