【发布时间】:2021-07-27 05:30:48
【问题描述】:
我有一个过滤待办事项数组的函数。数组被正确过滤,但是当我输入其他内容时,它会删除其他数组元素并且不会返回。
我见过一些解决方案,但他们说“你必须在渲染函数中编写代码”,而我没有使用这种方法,因为我在 props 的帮助下将数组渲染到其他地方。 filteredTodos 拥有所有本地存储数据。
如何过滤这些数据而不丢失数据?
// *** Form.js ***
const filterTodos = (e) => {
const filtTod = filteredTodos.filter((todo) => {
return todo.text.toLowerCase().indexOf(e.target.value.toLowerCase()) !== -1
});
setFilteredTodos([...filtTod]);
};
// it's my render place *** TodoList.js ***
return (
<div className="todo-container">
<ul className="todo-list">
{filteredTodos.map((todo) => {
return (
<Todo
id={todo.id}
key={todo.id}
text={todo.text}
completed={todo.completed}
setTodos={setTodos}
todos={todos}
/>
)
})}
</ul>
</div>
);
const [inputText, setInputText] = useState("");
const [todos, setTodos] = useState([]); // Todos is all array items.
const [status, setStatus] = useState("all");
const [filteredTodos, setFilteredTodos] = useState([]); // the state is for my filter list
【问题讨论】:
-
你有一些待办事项的参考数组吗?如果您对过滤和原始列表都使用一个列表,则在一次过滤操作之后,您已经不可挽回地丢失了数据。使用两个列表:一个包含所有待办事项,另一个只包含过滤的待显示,根据所有待办事项的引用数组动态生成。
-
@ggorlen 我有,但我不知道我是怎么做到的。
-
请将您的参考数组显示为minimal reproducible example 组件的一部分。很可能,您只需要
filteredTodos.filter=>allTodos.filter或类似的东西。 -
@ggorlen 请你写一个答案?
-
@ggorlen 好的,我添加了所有州。如果您想了解有关代码的其他信息。请告诉我。
标签: javascript arrays reactjs filter