useState
和 SWR
是 React 中常用的两个库,用于处理组件的状态和数据获取。useState
是 React 内置的 Hook,用于在函数组件中管理状态,而 SWR
是一个外部库,用于数据获取和缓存。
useState
useState
是 React 的一个 Hook,允许你在函数组件中添加状态。SWR
isLoading
, isError
)的需要。类型
应用场景
假设我们有一个简单的组件,需要从 API 获取用户信息并在组件中显示。
import React, { useState } from 'react';
import useSWR from 'swr';
function UserProfile({ userId }) {
// 使用 SWR 获取用户数据
const { data: userData, error } = useSWR(`/api/users/${userId}`, fetch);
// 使用 useState 管理加载状态和错误信息
const [isLoading, setIsLoading] = useState(true);
const [errorMessage, setErrorMessage] = useState('');
// 当 SWR 数据更新时,相应地更新本地状态
React.useEffect(() => {
if (error) {
setErrorMessage('Failed to load user data.');
} else if (userData) {
setIsLoading(false);
}
}, [error, userData]);
if (isLoading) return <div>Loading...</div>;
if (error) return <div>Error: {errorMessage}</div>;
return (
<div>
<h1>{userData.name}</h1>
<p>{userData.email}</p>
</div>
);
}
export default UserProfile;
问题:数据没有及时更新
mutate
函数来手动触发数据的重新获取。import useSWR, { mutate } from 'swr';
function UserProfile({ userId }) {
const { data: userData, error } = useSWR(`/api/users/${userId}`, fetch);
// 当需要更新数据时调用 mutate
const refreshData = () => {
mutate(`/api/users/${userId}`);
};
// ...
}
问题:错误处理不当
useEffect
中正确处理 error
状态,并向用户显示适当的错误信息。通过这种方式,你可以有效地结合 useState
和 SWR
来管理组件的状态和数据获取,同时处理可能出现的常见问题。
领取专属 10元无门槛券
手把手带您无忧上云