Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何在reactjs中动态加载组件?_Javascript_Reactjs_React Motion - Fatal编程技术网

Javascript 如何在reactjs中动态加载组件?

Javascript 如何在reactjs中动态加载组件?,javascript,reactjs,react-motion,Javascript,Reactjs,React Motion,我正在做一个Reactjs+ReactMotion项目,在一个“模态窗口”(比方说)中,如果可能的话,我想动态地挂载或加载一个组件 到目前为止,我的解决方案是:我找不到一种方法,因此似乎更容易将组件放置到位,并隐藏它,然后在状态更改时切换类或样式,显示隐藏的组件,并且只有在“模式窗口”转换完成之后 在下面分享一些代码,以便更容易理解我要做的事情。没有事件处理程序,大多数代码都已删除,但是onRest(动画完成时的事件回调)和渲染fn也已被删除 class HomeBlock extends Re

我正在做一个Reactjs+ReactMotion项目,在一个“模态窗口”(比方说)中,如果可能的话,我想动态地挂载或加载一个组件

到目前为止,我的解决方案是:我找不到一种方法,因此似乎更容易将组件放置到位,并隐藏它,然后在状态更改时切换类或样式,显示隐藏的组件,并且只有在“模式窗口”转换完成之后

在下面分享一些代码,以便更容易理解我要做的事情。没有事件处理程序,大多数代码都已删除,但是
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};
})}
);
}
}
导出默认应用程序;