【发布时间】:2020-07-10 12:36:36
【问题描述】:
这是我的代码:
function Users() {
const [users, setUsers] = useState([]);
const [loading, setLoading] = useState(false);
useEffect(() => {
const getUsersData = async () => {
setLoading(true);
const response = await fetch('https://api.github.com/users');
const data = await response.json();
setUsers([...data]);
setLoading(false);
}
getUsersData();
}, [users])
return (
<div className="container my-4">
<div className="row">
{loading ? (
<p>loading...</p>
) : (
users.map((user) => <UserItem key={user.id} user={user}/>)
)}
</div>
</div>
)
}
在 setUsers 之后,setLoading(false) 不起作用。
在 chrome 开发者工具中,加载状态仍然是“true”而不是“false”。
如果我使用双 setLoading(false) 它的工作,加载状态现在是“假”。 像这样:
useEffect(() => {
const getUsersData = async () => {
setLoading(true);
const response = await fetch('https://api.github.com/users');
const data = await response.json();
setUsers([...data]);
setLoading(false);
setLoading(false);
}
getUsersData();
}, [users])
为什么 1 个 setLoading 不工作,但 2 个 setLoading 工作?
【问题讨论】:
-
如果你使用 try catch 块会发生什么? developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…
-
@JuniusL。好的,我会试试的。
-
@JuniusL。没有错误。
-
在 useEffect 中,我试图不传递第二个参数。它的工作,但为什么? useEffect(() => { }, [])
-
它会导致一个循环,每次
users更改useEffect被调用,你不应该把它作为一个依赖。
标签: reactjs async-await react-hooks use-effect react-state