javascript - 带点符号的多重导出

标签 javascript reactjs webpack

我有这个代码:

侧边栏.jsx

class Sidebar extends Component {
    render() {
    return (
        <div className="sidebar">
          { this.props.children }
        </div>
    );
  }
}


class Item extends Component {
  render() {
    return (
        <div>
            <b> { this.props.name } </b>
        </div>
    );
  }
}

export { Sidebar, Item };

index.js

export {default as Header} from './Header';
export {default as Footer} from './Footer';
export {default as Sidebar, Item} from './Sidebar';

app.jsx

import { Sidebar } from '../components';
class App extends Component {
  render() {

    return (
      <div>
          <Header/>
          <Sidebar>
              <Sidebar.Item name='item1' />
              <Sidebar.Item name='item2' />
              <Sidebar.Item name='item3' />
          </Sidebar>
          <Footer/>
// ...

我得到的错误是:

TypeError: Cannot read property 'Item' of undefined

如何在 index.js 中多个导出组件并从另一个文件调用?我确信页眉和页脚可以正常工作,因为该文件中只有一个类。

最佳答案

function Sidebar(props) {
    return (
        <div className="sidebar">
          { props.children }
        </div>
    );
}


function Item (props) {
    return (
        <div>
            <b> { this.props.name } </b>
        </div>
    );
}

Sidebar.Item = {Item}

export default Sidebar

然后就可以这样使用了

import Sidebar from './Sidebar.js'

...

return (
    <Sidebar>
        <Sidebar.Item />
    </Sidebar>
)

如果您使用基于类的组件,则可以删除花括号

class Sidebar extends Component {
   render() {
       return (
           <div className="sidebar">
               {this.props.children}
           </div>
       );
   }
}


class SidebarItem extends Component {
    render() {
        return (
            <div>
                <b> {props.name} </b>
            </div>
    );
}

Sidebar.Item = SidebarItem;

export default Sidebar;

我从一位同事那里学到了这种做法,他在语义UI的表中看到了它 here.

关于javascript - 带点符号的多重导出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48996762/

相关文章:

javascript - 当 event.target 返回子元素时,如何只获取点击事件的父元素?

javascript - 通过ajax传输数据到php

javascript - 如何修复 :"Refused to run the JavaScript URL because it violates the following Content Security Policy..."

javascript - 在未安装的组件上调用 setState

node.js - 从 npm 包导入 jquery?

javascript - 如何使用 Webpack CLI 指定输出文件名?

javascript - Angular 6 : TypeError: Unable to get property 'nativeElement' of undefined or null reference

ReactJS 直接设置状态和通过方法参数设置状态的区别

javascript - 如何在 React 路由器上使用 Laravel 路由

git - Webpack 和更改 git 中的分支 - 永无休止的冲突