面试题答案
一键面试Solid.js 中 Suspense 组件在异步数据获取场景下的作用
- 作用:Suspense 组件用于处理异步操作,在异步数据尚未准备好时,显示一个加载状态,直到数据可用。它使得应用在等待数据时不会卡顿,保持良好的用户体验,常用于处理如 API 数据获取、动态导入组件等异步操作。
工作原理
- 包裹异步组件:将包含异步操作的组件放在
<Suspense>
组件内部。 - 加载状态:当异步操作开始时,Suspense 组件会显示其
fallback
属性指定的加载内容。 - 数据就绪:一旦异步操作完成(数据获取成功),Suspense 组件会渲染包裹的实际组件内容。
处理异步数据请求错误
- 使用 ErrorBoundary:配合
ErrorBoundary
组件捕获异步操作中的错误。ErrorBoundary
可以捕获其子组件树中抛出的错误,并进行统一处理。 - 代码示例:
import { createResource, Suspense } from 'solid-js';
import ErrorBoundary from './ErrorBoundary';
function App() {
const [data, { error }] = createResource(() => fetch('https://example.com/api/data').then(res => res.json()));
return (
<ErrorBoundary>
<Suspense fallback={<div>Loading...</div>}>
{data() && <div>{JSON.stringify(data())}</div>}
</Suspense>
</ErrorBoundary>
);
}
// ErrorBoundary 组件示例
import { createSignal } from'solid-js';
const ErrorBoundary = ({ children }) => {
const [error, setError] = createSignal(null);
return (
<div>
{error() && <div>Error: {error()}</div>}
{() => {
try {
return children;
} catch (e) {
setError(e.message);
return null;
}
}}
</div>
);
};
export default ErrorBoundary;
在上述代码中,createResource
用于发起异步数据请求。Suspense
组件在数据加载时显示 fallback
内容。ErrorBoundary
组件捕获可能出现的错误,并在发生错误时显示错误信息。