Reactjs 如何使用React创建可再发行的小部件

Reactjs 如何使用React创建可再发行的小部件,reactjs,react-component,Reactjs,React Component,我想使用React构建一个小部件,非spa站点可以通过指向js文件并添加javascript片段来使用它。例如 <script src="somepath/mycomponent.min.js"></script> <script>MyComponent.render('id-of-a-div')</script> MyComponent.render('id-of-a-div')) 我已经用React和setup webpack创建了一个组

我想使用React构建一个小部件,非spa站点可以通过指向js文件并添加javascript片段来使用它。例如

<script src="somepath/mycomponent.min.js"></script>
<script>MyComponent.render('id-of-a-div')</script>

MyComponent.render('id-of-a-div'))
我已经用React和setup webpack创建了一个组件。我在大多数spa案例中,顶层组件以

ReactDOM.render(<MyComponent/>, document.getElementById(id));
ReactDOM.render(,document.getElementById(id));
我的组件将无法执行此操作,因为它不知道将自己渲染到哪个元素


我应该如何以及在何处创建将组件附加到元素的函数?

您需要一个具有初始化父页面并与之交互的方法的文件

也许在utilities.js中

 export const utilities = {
   // Here you will initialize the widget and you could pass an argument 
  // with the id of the tag where you wanna inject the app 

   initWidget: ( elementId ) => {
    if( !elementId ){
     document.createElement( 'rootApp' ); 
     ReactDOM.render(<MyComponent/>, document.getElementById('rootApp'));
    }
    else {
     ReactDOM.render(<MyComponent/>, document.getElementById(id));
     }
   },
 } 
导出常量实用程序={
//在这里,您将初始化小部件,并可以传递一个参数
//带有要注入应用程序的标记的id
initWidget:(elementId)=>{
如果(!elementId){
createElement('rootApp');
ReactDOM.render(,document.getElementById('rootApp');
}
否则{
render(,document.getElementById(id));
}
},
} 
在加载所有js后,该实用程序将在html标记中进行初始化:

<script type='text/javascript' src='/widget.js'></script>
<script>
 utilities.initWidget( 'myCustomId' );
</script>

initWidget('myCustomId');

这样的流可能对您有用。

您需要一个包含初始化父页面并与之交互的方法的文件

也许在utilities.js中

 export const utilities = {
   // Here you will initialize the widget and you could pass an argument 
  // with the id of the tag where you wanna inject the app 

   initWidget: ( elementId ) => {
    if( !elementId ){
     document.createElement( 'rootApp' ); 
     ReactDOM.render(<MyComponent/>, document.getElementById('rootApp'));
    }
    else {
     ReactDOM.render(<MyComponent/>, document.getElementById(id));
     }
   },
 } 
导出常量实用程序={
//在这里,您将初始化小部件,并可以传递一个参数
//带有要注入应用程序的标记的id
initWidget:(elementId)=>{
如果(!elementId){
createElement('rootApp');
ReactDOM.render(,document.getElementById('rootApp');
}
否则{
render(,document.getElementById(id));
}
},
} 
在加载所有js后,该实用程序将在html标记中进行初始化:

<script type='text/javascript' src='/widget.js'></script>
<script>
 utilities.initWidget( 'myCustomId' );
</script>

initWidget('myCustomId');

也许这样的流程对您可能有用。

我只记得在webpack中,您可以在输出中使用类似的东西,这样它可以更自定义:*output.library和output.libraryTarget**我只记得在webpack中,您可以在输出中使用类似的东西,这样它可以更自定义:*output.library,和output.libraryTarget**