【发布时间】:2020-10-14 10:29:42
【问题描述】:
我使用 Hooks useState 并且作为默认状态我使用一个空数组。 问题仅在于 filteredList state,当我加载页面时,我的状态为 null 而不是空数组。 如果我设置一个空对象或只是一个字符串,那么它会显示真正的默认状态,但是如果我在那里放置一个带有值的数组,那么它首先会记录正确的数组,然后变成一个空数组。 奇怪的是几天前我写的时候它工作得很好,所以我不知道这是一个怪癖还是一个问题...... 这是我的代码:
export default function App() {
const [inputText, setinputText] = useState("");
const [todos, setTodos] = useState([]);
const [filterStatus, setFilterStatus] = useState("all");
const [filteredList, setFilteredList] = useState([]);
useEffect(() => {
getLocalTodos();
}, [])
useEffect(() => {
filterHandler();
saveLocalTodos();
}, [todos, filterStatus]);
const filterHandler = () => {
switch (filterStatus) {
case "completed":
setFilteredList(todos.filter(todo => todo.completed === true));
break;
case "uncompleted":
setFilteredList(todos.filter(todo => todo.completed === false));
break;
default:
setFilteredList(todos);
break;
}
}
const saveLocalTodos = () => {
localStorage.setItem('todos', JSON.stringify(todos));
}
const getLocalTodos = () => {
setTodos(JSON.parse(localStorage.getItem('todos')));
}
剩下的就是回报..
【问题讨论】:
-
我相信您的代码中有竞争条件。你的两个效果一个接一个地运行,一个尝试
gettodos,另一个尝试settodos。 -
能否也提供
return代码让我们了解更多?
标签: reactjs react-hooks use-state