Ana*_*dhu 1 reactjs service-worker react-router-dom
我有一个React应用程序react-router-dom。提供静态文件(index.html、 、...),将所有请求重新路由到使用。我用它来将所有 React 和 babel 代码编译到单个文件。整个内容在第一次访问时加载(加上使用)。blah blah.jsApache serverindex.html.htaccessWebpack.jscache first SW
每次加载路由(例如/profile)时,请求都会传递到服务器(发送HTTP请求),从而导致不必要的延迟
如何在不向服务器发送任何请求的情况下切换路由?
是否可以使用Service Worker(就像我的缓存优先方法一样)?
这是我的反应路由器组件
class App extends React.Component{
render(){
return(
<BrowserRouter>
<Switch>
<Route path="/" exact component={Home} />
<Route path="/profile" exact component={Profile} />
<Route path="/about" component={About}/>
</Switch>
</BrowserRouter>
);
}
}
ReactDOM.render(<App/>,document.getElementById('root'));
Run Code Online (Sandbox Code Playgroud)
您尝试做的事情被称为“应用程序外壳”架构模式。
诀窍是让您的 Service Worker 的fetch处理程序检查传入请求是否是导航( event.request.mode === 'navigate'),如果是,则使用缓存的 App Shell HTML 进行响应(这听起来像/index.html您的情况)。
执行此操作的通用方法是:
self.addEventListener('fetch', (event) => {
if (event.request.mode === 'navigate') {
event.respondWith(caches.match('/index.html'));
} else {
// Your other response logic goes here.
}
});
Run Code Online (Sandbox Code Playgroud)
这将导致您的 Service Worker 的行为方式与您已配置的 Web 服务器类似。
| 归档时间: |
|
| 查看次数: |
2445 次 |
| 最近记录: |