gpt4 book ai didi

javascript - 在没有路由器组件的情况下使用 React

转载 作者:搜寻专家 更新时间:2023-11-01 05:28:12 26 4
gpt4 key购买 nike

如果我想使用 reactjs 制作一个不是单个页面的 Web 应用程序。我是否应该将所有 React 代码编译成一个文件并将其加载到应用程序的所有页面,然后使用我公开的函数来呈现必要的组件?

一个html文件的例子

<div id="Clock" data-react="Clock"></div>
<div id="HelloWorld" data-react="HelloWorld"></div>

index.js 的例子

import React from 'react';
import ReactDOM from 'react-dom';
import Clock from './Clock';
import HelloWorld from './HelloWorld';
import OtherComponent from './OtherComponent';

const APPS = {
Clock,
HelloWorld,
OtherComponent
};

const MyReactRender = react => {

let component = react.getAttribute('data-react');
let App = APPS[component];

if(App != undefined) {
ReactDOM.render(<App />, document.getElementById(component));
}
}

document.querySelectorAll('[data-react]').forEach(MyReactRender);

最佳答案

我会看到两种提高质量和难度的方法。在这两种情况下,您都使用良好的旧 anchor 元素将页面重定向到不同模板对应的 url。

  • 手动检查 div id 是否存在

在这种情况下,每个模板都包含相同的 javascript 包,该包包含应用程序中的所有内容以及具有与特定组件对应的 id 的单个元素。这个想法是检查页面中是否存在某个元素,如果存在,则激活其对应的 React 组件。

if (document.getElementById('component-root')) {
ReactDOM.render(<Component />, document.getElementById('component-root'));
}

从好的方面来说,它很容易实现。不利的一面是,捆绑总是会变得越来越大,并且每次添加新“页面”时 ifs 列表都会增加。

  • 将您的模块分隔成实际的包

存在不同的包管理器,但我建议使用 Webpack 创建多个仅包含应用程序特定部分的包。然后,每个模板只包含相应的 div 元素,以及那个特定的包。


<head><script src="/js/clock.js"></head>
<body><div id="root-clock"></div></body>

<head><script src="/js/otherComponent.js"></head>
<body><div id="root-other-component"></div></body>

如何使用 webpack 打包多个 bundle 超出了这个答案的范围,但请看 here .

关于javascript - 在没有路由器组件的情况下使用 React,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46003599/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com