Reactjs 如何使用React创建可再发行的小部件
我想使用React构建一个小部件,非spa站点可以通过指向js文件并添加javascript片段来使用它。例如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创建了一个组
<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**