如何使用 React 提供多个 HTML 文件?

新手上路,请多包涵

我想用 React 构建一个包含多个 HTML 页面的 Web 应用程序。例如 login.html 和 index.html。我已经创建了这些 HTML 页面并使用我的后端将它们映射到 URI。所以我有 localhost:8080/login 和 localhost:8080/index。不幸的是,React 只使用 index.html 文件来呈现内容!

所以 index.html 有效并且显示了 React 内容: localhost:3000/index.html

 <!-- index.html -->
...
<body>
  <noscript>
      You need to enable JavaScript to run this app.
  </noscript>
  <div id="wizard"></div>
</body>
...

<!-- index.tsx -->
import * as React from 'react';
import * as ReactDOM from 'react-dom';
import FetchData from "./FetchData";
import 'bootstrap/dist/css/bootstrap.min.css';
import './index.css';
import registerServiceWorker from './registerServiceWorker';

ReactDOM.render(
<div className="d-flex flex-column">
            <div className="bg-dark text-light AppHeading">Self-Service-Webwizard</div>
            <div className="bg-white"><FetchData /></div>
        </div>,
document.getElementById('wizard') as HTMLElement
);
registerServiceWorker();

但是 wizardLogin.html 不显示 React 内容: localhost:3000/wizardLogin.html

 <!-- wizardLogin.html -->
...
<body>
  <noscript>
      You need to enable JavaScript to run this app.
  </noscript>
  <div>Wizard login</div>
  <div id="wizardLogin"></div>
</body>
...

<!-- LoginPage.tsx -->
import * as React from 'react';
import * as ReactDOM from 'react-dom';
import 'bootstrap/dist/css/bootstrap.min.css';
import './index.css';
import registerServiceWorker from './registerServiceWorker';
import LoginForm from "./LoginForm";

ReactDOM.render(
    <div>
        <div><h1>Wizard Login.tsx</h1></div>
        <div><LoginForm/></div>
    </div>,
    document.getElementById('wizardLogin') as HTMLElement
)
;
registerServiceWorker();

我是不是做错了什么,或者无法使用 React 提供多个 HTML 文件?

Github: https ://github.com/The-Taskmanager/SelfServiceWebwizard

原文由 Taskmanager 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.1k
2 个回答

到目前为止,我了解到 React native 不支持多个 HTML 页面,因为它是一个单页应用程序。我将 index.html 保留为单个 HTML 页面,并通过反应中的条件渲染解决了这个问题。当条件满足时,我将渲染另一个 React .tsx 文件。

原文由 Taskmanager 发布,翻译遵循 CC BY-SA 4.0 许可协议

如果你使用 create react app 你必须 eject 你的项目首先因为你必须在Webpack配置中更改你的入口点

首先 eject (如果你没有webpack配置文件)

     npm run eject

然后转到配置文件

webpack.config.js

 entry: {
    index: [
      require.resolve('react-dev-utils/webpackHotDevClient'),
      require.resolve('./polyfills'),
      require.resolve('react-error-overlay'),
      paths.appIndexJs,
    ],
    admin:[
      require.resolve('react-dev-utils/webpackHotDevClient'),
      require.resolve('./polyfills'),
      require.resolve('react-error-overlay'),
      paths.appSrc + "/admin.js",
      ]
  },
  output: {
    path: paths.appBuild,
    pathinfo: true,
    filename: 'static/js/[name].bundle.js',
    chunkFilename: 'static/js/[name].chunk.js',
    publicPath: publicPath,
    devtoolModuleFilenameTemplate: info =>
      path.resolve(info.absoluteResourcePath),
  },

之后你应该添加 Wepack 插件并将其添加到你的项目中

 new HtmlWebpackPlugin({
      inject: true,
      chunks: ["index"],
      template: paths.appHtml,
    }),
    new HtmlWebpackPlugin({
      inject: true,
      chunks: ["admin"],
      template: paths.appHtml,
      filename: 'admin.html',
    }),

你也应该重写网址

historyApiFallback: {
      disableDotRule: true,
      // 指明哪些路径映射到哪个html
      rewrites: [
        { from: /^\/admin.html/, to: '/build/admin.html' },
      ]
    }

您可以阅读此页面以获取更多信息 http://imshuai.com/create-react-app-multiple-entry-points/

原文由 hamidreza nikoonia 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题