React单页应用实现伪静态访问和代码拆分、懒加载的方法如下:

1. 伪静态访问(使用BrowserRouter而非HashRouter)

当使用BrowserRouter时,URL看起来更加干净,没有#。但要使其正常工作,服务器需要进行配置,以便对所有路由请求返回同一个HTML文件(通常是index.html)。

例如,对于Express服务器,你可以这样做:

const express = require('express');
const path = require('path');
const app = express();

app.use(express.static(path.join(__dirname, 'build')));

app.get('/*', function (req, res) {
  res.sendFile(path.join(__dirname, 'build', 'index.html'));
});

app.listen(9000);

对于其他服务器(如Apache、Nginx等),你需要配置它们以返回相同的index.html文件,无论请求的路径是什么。

2. 代码拆分和懒加载

React提供了一个名为React.lazy的函数,允许你渲染动态导入的组件作为常规组件。

方法

使用React.lazy():

使用React.lazy()可以自动加载组件。

const SomeComponent = React.lazy(() => import('./SomeComponent'));

使用Suspense组件:

React.lazySuspense配合使用,可以显示一些加载提示,直到组件加载完成。

import React, { Suspense } from 'react';

function App() {
    return (
        <div>
            <Suspense fallback={<div>Loading...</div>}>
            <SomeComponent />
            </Suspense>
        </div>
    );
}

使用Route-based code splitting:

结合React Router,可以实现基于路由的代码拆分。

import { BrowserRouter as Router, Route, Switch } from 'react-router-dom';

const Home = React.lazy(() => import('./routes/Home'));
const About = React.lazy(() => import('./routes/About'));

function App() {
    return (
        <Router>
            <Suspense fallback={<div>Loading...</div>}>
            <Switch>
                <Route exact path="/" component={Home} />
                <Route path="/about" component={About} />
            </Switch>
            </Suspense>
        </Router>
    );
}

这样,当用户访问不同的路由时,只会加载与该路由相关的代码,从而实现了代码拆分和懒加载。


A Student on the way to full stack of Web3.