【问题标题】:React.js: How to load the App component in a new tab?React.js:如何在新选项卡中加载 App 组件?
【发布时间】:2020-07-06 05:30:52
【问题描述】:

我正在使用 React.js 构建一个新的 Web 应用程序。我有一个使用普通 HTML 和 CSS 静态构建的欢迎页面 (index.html)。

在那个欢迎页面中,我有一个“开始使用”按钮,单击它,我将在新选项卡中打开一个新的 html 页面,我需要在其中加载我的 React 网络应用程序。

我看到的所有示例都直接在 index.html 页面中加载 React App。有人可以告诉我如何在从静态 index.html 页面启动的新页面中加载 React 应用程序吗?

谢谢。

【问题讨论】:

    标签: javascript reactjs react-router react-dom


    【解决方案1】:

    您可以通过前往位于您的反应应用程序公共目录中的 manifest.json 文件并将您的“start_url”键更改为您想要的任何文件来更改您的反应应用程序的起点。

    然后将您的 ReactDOM.render(<App />, el) 更改为您希望在新起点文件中添加的任何元素。

    【讨论】:

    • 感谢您的回答。但是当我这样做时,我得到一个错误:“错误:目标容器不是 DOM 元素。”这是因为即使我修改了 start_url,看起来它仍在尝试将 App 加载到 index.html 中。除了上述之外,我还有什么需要做的吗?谢谢。
    • 你能分享更多关于你改变了什么的细节吗?
    • 我的修改是:1. manifest.json: "start_url": "./app.html", 2. 在公共目录中添加了一个新的“app.html”文件 3. 在“index .html”,添加了指向“app.html”文件的链接另外,app.html 有 DOM 元素,所以这不是问题。
    • 另一个尝试的解决方案:stackoverflow.com/questions/55494682/…希望这个可以正常工作!:)
    【解决方案2】:

    有两种方法可以做到这一点:

    方法 1 - 使用 npm runeject(不推荐

    以下是将 React App 的起点从“index.html”更改为“app.html”的步骤:

    $npm 运行弹出

    $vim ./config/paths.js

    将此行更新为:“appHtml: resolveApp('public/app.html')”,

    $vim node_modules/html-webpack-plugin/index.js

    将此行更新为:"filename: 'app.html',"

    方法 2 - 编辑 react-scripts 文件

    但是,Facebook 建议不要弹出,因为开发人员很难让他们的构建脚本保持最新并自行管理整个构建过程。他们鼓励开发人员使用 create-react-app。推荐的方法是 fork create-react-app 代码,更新 react-scripts 包,将新脚本发布回 npm,然后继续使用您刚刚发布的 create-react-app 的新自定义版本。

    已发表的许多文章说明了这一过程: https://auth0.com/blog/how-to-configure-create-react-app/

    https://www.youtube.com/watch?v=I22TW-33dDE

    https://github.com/facebook/create-react-app/issues/682

    https://github.com/timarney/react-app-rewired

    https://spin.atomicobject.com/2020/01/28/eject-create-react-app-drawbacks/

    https://medium.com/curated-by-versett/dont-eject-your-create-react-app-b123c5247741#:~:text=least%20for%20now.-,%E2%80%9CCreate%2DReact%2DApp%20is%20missing%20a%20feature%20that%20I,someone%20else%20has%20done%20previously.

    https://medium.com/@denis.zhbankov/maintaining-a-fork-of-create-react-app-as-an-alternative-to-ejecting-c555e8eb2b63

    https://codeburst.io/customizing-create-react-app-done-right-4a22683f2e09

    出于我的目的,我认为即使发布新的自定义版本也太过分了。因此,在不弹出或创建自定义版本的 CRA 的情况下,我可以通过执行以下操作来实现此目的:

    1. 将 ./node_modules/react-scripts/config/paths.js 中所有出现的 'index.html' 替换为 'app.html'

    2. 将 ./node_modules/html-webpack-plugin/index.js 中的 'filename: index.html' 替换为 'filename: app.html'

    这样,您将能够继续从 Facebook 接收更新,而无需自己管理所有构建脚本。但是,我认为这样做的缺点是每次有更新时,我们的更改可能会被新更改覆盖,这将是一个重大更改。因此,每次代码因新更新而中断时,我们都必须更新上述两个文件。但考虑到保留 create-react-app 的优势,我认为利大于弊。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-01-19
      • 2018-05-29
      • 1970-01-01
      • 2020-05-02
      • 1970-01-01
      • 2018-04-04
      • 1970-01-01
      相关资源
      最近更新 更多