[英]Can I give arguments to a react-app? (dependency injection with React)
我想使用一个 React-App,并给它一些 arguments(道具),这取决于我嵌入它的位置。
所以退一步说,我们实际上将 React 用作一个库,而不是整个页面都在 React 中。 我们有一个功能非常强大的网站,现在正在构建一些部分。 我们的动机是:如果你想在另一个页面中使用相同的组件,你可以简单地复制粘贴包括css
和js
文件的 3 行,放一个<div id="myReactAppRoot"></div>
,就是这样。 非常快速,非常干净,并且可以立即运行。
当我有 React 应用程序的另一个“副本”时,我想给它一个不同的起始 state。
我怎样才能做到这一点?
我当前的解决方案只是在 React 应用程序中添加一个utils.js
,我用它来访问windows
object 并取出我想要的部分:
const utils = {
fun1: window.myProject.forReact,fun1,
groupElements: window.myProject.forReact.groupElements,
permissionLevel: window.myProject.forReact.permissionLevel
};
export default utils;
然后在其他组件中导入utils
并使用函数/读取值。 当然,让这些对象在主页上可用。
但说真的,这感觉不对。
<div id="app">
{{ message }}
</div>
var app = new Vue({
el: '#app',
data: {
message: 'Hello Vue!'
}
})
因为我可以只复制粘贴这一点,然后更改Hello Vue!
,并且突然之间开始的 state 在我的“第二个副本”中有所不同。 或者更巧妙的是,将它包装在一个获得一些初始状态的initialState
中,并将 JavaScript 部分放入我引用的文件中。
我已经考虑编辑正在引用的编译 JavaScript 代码。 到目前为止,我只看到 myReactAppRoot 元素的实际挂钩是在myReactAppRoot
中main.chunck.js
的,并且编辑该文件似乎太像 hack(感觉比我当前的解决方案更错误)。
为了扩展 Mike 的评论,让我们首先将您的 Vue 应用程序翻译成 React:
//html
<div id="root"></div>
//JS
const App = ({message}) => <div>{message}</div>
const rootElement = document.getElementById("root");
ReactDOM.render(
<App message={"Hello, React!"}/>
rootElement
);
一个 function 将App
实例安装在 DOM 节点上,id domId
类似于
function mountAppWithMessageOnNode(message, domId){
const rootElement = document.getElementById(domId);
ReactDOM.render(
<App message={message}/>
rootElement
);
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.