javascript - 需要时导入react组件

标签 javascript reactjs import

我需要你的帮助。我想用 React 渲染三个选项卡。问题是:我需要按选项卡的顺序(1、2、0)对选项卡进行排序。我在 app.js 中创建了函数 getTabsTitlesInOrder(),我想在其中下载所需的文件并将其分配给适当的内容[“选项卡”]。在这种情况下有什么方法可以下载文件吗?

已更新

新问题:现在我有一个错误 Uncaught Error :对象作为 React 子对象无效(找到:带有键 {default} 的对象)。如果您打算渲染子集合,请改用数组。请帮助我修复它!

我的文件: tabs.json:

{
   "tabs": [
      {
         "title": "tabA",
         "order": 1,
         "path": "./tabA.js",
      },
      {
         "title": "tabB",
         "order": 2,
         "path": "./tabB.js",
      },
      {
         "title": "tabC",
         "order": 0,
         "path": "./tabC.js",
      },
   ]
}

tabA.js(tabB.jstabC.js 相同):

import React from 'react';

const TabA = createReactClass({
   render: function(){
      return(
         <div className="tabAContent">
            <p>Content of Tab A</p>
         </div>
      );
   }
)};

export default TabA;

app.js:

const tabsJson = require('../tabs.json');
import React from 'react';
import ReactDOM from 'react-dom';

class Tabs extends React.Component{
    render(){
        return(
            <div className="tabs">
                {React.Children.map(this.props.children, (child, i) => {
                    return(
                        <div 
                            className={"tabTitle " + (child.key === this.props.active ? "tabTitleActive" 
                                        : " ")}
                            onClick={() => {
                                this.props.onChange(child.key);
                            }}>
                            {child}
                        </div>
                    );
                })}
            </div>
        );
    }
};


class App extends React.Component{
    constructor(props) {
        super(props);
        this.state = {active: 'tab1'};
    }

    render() { 
        var firstTabTitle, secondTabTitle, thirdTabTitle;
        var content = {};

        var requireTab = require.context("./tabs", true, /^.*\.js$/);

        const getTabsTitlesInOrder = () => {
            for(var i = 0; i < tabsJson.tabs.length; i ++){
                switch (tabsJson.tabs[i].order){
                    case 0:
                        firstTabTitle = tabsJson.tabs[i].title;

                        content["tab1"] = 
                                requireTab(tabsJson.tabs[i].path);

                        break;
                    case 1:
                        secondTabTitle = tabsJson.tabs[i].title;

                        content["tab2"] = 
                                requireTab(tabsJson.tabs[i].path);

                        break;
                    case 2:
                        thirdTabTitle = tabsJson.tabs[i].title;

                        content["tab3"] = 
                                requireTab(tabsJson.tabs[i].path);

                        break;
                }
            }
            getTabsContentInOrder (firstTabTitle, secondTabTitle, thirdTabTitle);
        };

        return(
            <div>
                <div className="tabButtons">
                    <Tabs 
                        active = {this.state.active}
                        onChange = {active => this.setState({active})}
                    >
                        <div key="tab1">{firstTabTitle}</div>
                        <div key="tab2">{secondTabTitle}</div>
                        <div key="tab3">{thirdTabTitle}</div>
                    </Tabs>
                </div>
                <div className="tabContent">{content[this.state.active]}</div>
            </div>
        );
    }
};

ReactDOM.render(
    <App />,
    document.getElementById('tab')
);

最佳答案

https://webpack.js.org/guides/dependency-management/#require-context

var requireTab = require.context("./tabs", true, /^tab[A-Z]\.js$/);
...
if (tab === 'A') {
   const content = requireTab('tabA')
...

关于javascript - 需要时导入react组件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47397136/

相关文章:

javascript - 使用 JavaScript 在外部 URL 中设置元素

javascript - 在屏幕阅读器中移动光标

javascript - Google map "Uncaught TypeError: Cannot read property ' defaultView' 未定义”

javascript - 将 React 小部件嵌入到另一个网站中

javascript - Laravel 不导入/读取公共(public)源文件 (css/js)

javascript - 是否可以覆盖原生 Es6 promise resolve 方法?

javascript - Rails 3 使用 jquery 制作 ajax 并执行 .js.erb

javascript - 在 React 中,如何检查输入单选是否已定义?

Python - 将包类导入控制台全局命名空间

r - 在 R 中将 excel 输出从字符转换为数字