在动态 ids 上渲染 reactdom (React JS)
Render reactdom on dynamic ids (React JS)
我们有一个基于 PHP 的 CMS,它使用自定义 mod 规则。
每个 module 都呈现为 HTML 文档,可以包含(挂钩)在每个页面上,并且在 html 中有自己的动态和唯一 ID。
现在我想为此 mod 规则创建一个 JavaScript 模板系统,其中可以在每个 mod 规则上呈现 React 应用程序。
例如,我创建了我的反应包。我还有一个带有 module 的单页,它生成带有 module html 的 modules,其中应该呈现反应。我希望我的反应包在这个 id 上呈现而不是:
ReactDOM.render(<App />, document.getElementById('root'));
ID mod-123416-name 是自动创建的,所以我想在客户端使用一些代码,例如 RenderReactOn("mod-123516-name") 在每个 mod使用此 ID 的规则。
因此我可以在客户端的 n 个不同 mod 规则上呈现相同的反应代码:
RenderReactOn("mod-123516-name");
RenderReactOn("mod-252141-name");
RenderReactOn("mod-453467-name");
React 可以做到这一点吗,或者在这种情况下的最佳做法是什么。也许我应该服用 Knockout.js 而不是反应?
谢谢指教
托尼
这根本不是问题,我会这样做:
将您的组件(React 应用程序)捆绑在一个文件中:
import React from 'react';
import { render } from 'ReactDOM'
import ReactAppOne from 'ReactAppOne'
import ReactAppTwo from 'ReactAppTwo'
const Apps = {
ReactAppOne,
ReactAppTwo,
}
function renderAppIn(elementId, appId) {
const APP = Apps[appId]
if (!APP) return;
render(<APP />, document.getElementById(id))
}
// simply assign that function to the window
window.renderAppIn = renderAppIn;
在你渲染的 html:
<div id="some-app-123"></div>
<div id="some-app-xyz"></div>
<script src="/js/bundle.js"></script>
<!-- Render your Render Stamements -->
<script>
renderAppIn('some-app-123', 'ReactAppOne')
renderAppIn('some-app-123', 'ReactAppTwo')
// render the same app in another div
renderAppIn('some-other-div', 'ReactAppTwo')
</script>
我们有一个基于 PHP 的 CMS,它使用自定义 mod 规则。
每个 module 都呈现为 HTML 文档,可以包含(挂钩)在每个页面上,并且在 html 中有自己的动态和唯一 ID。
现在我想为此 mod 规则创建一个 JavaScript 模板系统,其中可以在每个 mod 规则上呈现 React 应用程序。
例如,我创建了我的反应包。我还有一个带有 module 的单页,它生成带有 module html 的 modules,其中应该呈现反应。我希望我的反应包在这个 id 上呈现而不是:
ReactDOM.render(<App />, document.getElementById('root'));
ID mod-123416-name 是自动创建的,所以我想在客户端使用一些代码,例如 RenderReactOn("mod-123516-name") 在每个 mod使用此 ID 的规则。
因此我可以在客户端的 n 个不同 mod 规则上呈现相同的反应代码:
RenderReactOn("mod-123516-name");
RenderReactOn("mod-252141-name");
RenderReactOn("mod-453467-name");
React 可以做到这一点吗,或者在这种情况下的最佳做法是什么。也许我应该服用 Knockout.js 而不是反应?
谢谢指教 托尼
这根本不是问题,我会这样做:
将您的组件(React 应用程序)捆绑在一个文件中:
import React from 'react';
import { render } from 'ReactDOM'
import ReactAppOne from 'ReactAppOne'
import ReactAppTwo from 'ReactAppTwo'
const Apps = {
ReactAppOne,
ReactAppTwo,
}
function renderAppIn(elementId, appId) {
const APP = Apps[appId]
if (!APP) return;
render(<APP />, document.getElementById(id))
}
// simply assign that function to the window
window.renderAppIn = renderAppIn;
在你渲染的 html:
<div id="some-app-123"></div>
<div id="some-app-xyz"></div>
<script src="/js/bundle.js"></script>
<!-- Render your Render Stamements -->
<script>
renderAppIn('some-app-123', 'ReactAppOne')
renderAppIn('some-app-123', 'ReactAppTwo')
// render the same app in another div
renderAppIn('some-other-div', 'ReactAppTwo')
</script>