Javascript 如何在reactjs中动态加载组件?
我正在做一个Reactjs+ReactMotion项目,在一个“模态窗口”(比方说)中,如果可能的话,我想动态地挂载或加载一个组件 到目前为止,我的解决方案是:我找不到一种方法,因此似乎更容易将组件放置到位,并隐藏它,然后在状态更改时切换类或样式,显示隐藏的组件,并且只有在“模式窗口”转换完成之后 在下面分享一些代码,以便更容易理解我要做的事情。没有事件处理程序,大多数代码都已删除,但是Javascript 如何在reactjs中动态加载组件?,javascript,reactjs,react-motion,Javascript,Reactjs,React Motion,我正在做一个Reactjs+ReactMotion项目,在一个“模态窗口”(比方说)中,如果可能的话,我想动态地挂载或加载一个组件 到目前为止,我的解决方案是:我找不到一种方法,因此似乎更容易将组件放置到位,并隐藏它,然后在状态更改时切换类或样式,显示隐藏的组件,并且只有在“模式窗口”转换完成之后 在下面分享一些代码,以便更容易理解我要做的事情。没有事件处理程序,大多数代码都已删除,但是onRest(动画完成时的事件回调)和渲染fn也已被删除 class HomeBlock extends Re
onRest
(动画完成时的事件回调)和渲染fn也已被删除
class HomeBlock extends React.Component {
constructor (props) {
...
}
...
motionStyleFromTo () {
return {
...
};
}
onRest () {
// this is triggered when the Motion finishes the transition
}
render () {
return (
<Motion onRest={this.onRestCallback.bind(this)} style={this.motionStyleFromTo()}>
{style =>
<div className="content" style={{
width: `${style.width}px`,
height: `${style.height}px`,
top: `${style.top}px`,
left: `${style.left}px`
}}>
[LOAD COMPONENT HERE]
</div>
}
</Motion>
);
}
}
export default HomeBlock;
类HomeBlock扩展React.Component{
建造师(道具){
...
}
...
motionStyleFromTo(){
返回{
...
};
}
onRest(){
//这将在运动完成过渡时触发
}
渲染(){
返回(
{style=>
[此处加载组件]
}
);
}
}
导出默认主块;
您可以很容易地实现这一点。在本例中,我基于道具动态渲染组件:
class MyComponent extends React.Component {
propTypes: {
display: React.PropTypes.bool
},
render() {
return (
<div>
{this.props.display ? <ChildComponent /> : null}
</div>
)
}
}
类MyComponent扩展了React.Component{
道具类型:{
显示:React.PropTypes.bool
},
render(){
返回(
{this.props.display?:null}
)
}
}
在您的情况下,您可能希望使用内部组件状态来装载或卸载组件
仅供参考,在某些情况下,您可能更喜欢或需要使用样式来隐藏组件,而不是销毁它们。React文档中有更多关于这方面的内容。请参阅此处的“有状态的孩子”部分:您可以很容易地实现这一点。在本例中,我基于道具动态渲染组件:
class MyComponent extends React.Component {
propTypes: {
display: React.PropTypes.bool
},
render() {
return (
<div>
{this.props.display ? <ChildComponent /> : null}
</div>
)
}
}
类MyComponent扩展了React.Component{
道具类型:{
显示:React.PropTypes.bool
},
render(){
返回(
{this.props.display?:null}
)
}
}
在您的情况下,您可能希望使用内部组件状态来装载或卸载组件
仅供参考,在某些情况下,您可能更喜欢或需要使用样式来隐藏组件,而不是销毁它们。React文档中有更多关于这方面的内容。请参阅此处的“有状态的子项”部分:您可以使用依赖项注入和依赖项容器概念来实现。我在这个要点页面提供了一些示例代码 假设有4个组件,分别是D1,D2,D3。您需要的是创建依赖项注入和依赖项容器机制。这是一个非常简单的实现 假设您有一个这样的配置文件,它定义了您的组件
export default [
{
name:'D1',
path:'D1'
},
{
name:'D2',
path:'D2'
},
{
name:'D3',
path:'D3'
}];
然后你可以有一个组件容器,类似这样
import componentsConfig from 'ComponentsConfig';
let components = {};
for (var i = 0; i < componentsConfig.length; i++) {
let componentConfig = componentsConfig[i];
// Check if component is not already loaded then load it
if (components[componentConfig.name] === undefined) {
components[componentConfig.name] = require(`${componentConfig.path}`).default;
}
}
export default components;
从“componentsConfig”导入componentsConfig;
让组件={};
对于(变量i=0;i
最后,在要加载组件的地方,可以使用组件容器动态加载组件,或者换句话说,可以插入组件
import React, { Component } from 'react';
import ComponentContainer from './ComponentContainer';
class App extends Component {
render() {
let components = ['D1', 'D2', 'D3'];
return (
<div>
<h2>Dynamic Components Loading</h2>
{components.map((componentId) => {
let Component = ComponentContainer[componentId];
return <Component>{componentId}</Component>;
})}
</div>
);
}
}
export default App;
import React,{Component}来自'React';
从“./ComponentContainer”导入ComponentContainer;
类应用程序扩展组件{
render(){
让组件=['D1','D2','D3'];
返回(
动态构件加载
{components.map((componentId)=>{
让Component=ComponentContainer[componentId];
返回{componentId};
})}
);
}
}
导出默认应用程序;
您可以使用依赖项注入和依赖项容器概念来实现。我在这个要点页面提供了一些示例代码
假设有4个组件,分别是D1,D2,D3。您需要的是创建依赖项注入和依赖项容器机制。这是一个非常简单的实现
假设您有一个这样的配置文件,它定义了您的组件
export default [
{
name:'D1',
path:'D1'
},
{
name:'D2',
path:'D2'
},
{
name:'D3',
path:'D3'
}];
然后你可以有一个组件容器,类似这样
import componentsConfig from 'ComponentsConfig';
let components = {};
for (var i = 0; i < componentsConfig.length; i++) {
let componentConfig = componentsConfig[i];
// Check if component is not already loaded then load it
if (components[componentConfig.name] === undefined) {
components[componentConfig.name] = require(`${componentConfig.path}`).default;
}
}
export default components;
从“componentsConfig”导入componentsConfig;
让组件={};
对于(变量i=0;i
最后,在要加载组件的地方,可以使用组件容器动态加载组件,或者换句话说,可以插入组件
import React, { Component } from 'react';
import ComponentContainer from './ComponentContainer';
class App extends Component {
render() {
let components = ['D1', 'D2', 'D3'];
return (
<div>
<h2>Dynamic Components Loading</h2>
{components.map((componentId) => {
let Component = ComponentContainer[componentId];
return <Component>{componentId}</Component>;
})}
</div>
);
}
}
export default App;
import React,{Component}来自'React';
从“./ComponentContainer”导入ComponentContainer;
类应用程序扩展组件{
render(){
让组件=['D1','D2','D3'];
返回(
动态构件加载
{components.map((componentId)=>{
让Component=ComponentContainer[componentId];
返回{componentId};
})}
);
}
}
导出默认应用程序;