admin管理员组

文章数量:1316674

I have this code:

Sidebar.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 '../ponents';
class App extends Component {
  render() {

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

The error that I get is:

TypeError: Cannot read property 'Item' of undefined

How I can multiple export ponent in index.js and call from another file? I'm sure that Header and Footer work correctly because I have only one class in that file.

I have this code:

Sidebar.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 '../ponents';
class App extends Component {
  render() {

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

The error that I get is:

TypeError: Cannot read property 'Item' of undefined

How I can multiple export ponent in index.js and call from another file? I'm sure that Header and Footer work correctly because I have only one class in that file.

Share Improve this question edited Feb 26, 2018 at 21:10 Andrew Marshall 97k20 gold badges227 silver badges217 bronze badges asked Feb 26, 2018 at 20:42 Kaiser69Kaiser69 4308 silver badges21 bronze badges
Add a ment  | 

2 Answers 2

Reset to default 9
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

Then you can use it like this

import Sidebar from './Sidebar.js'

...

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

If you're using class based ponents, you can remove the curly braces

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;

I learned this practice from a coworker that saw it in semantic ui's table here.

Have you tried

import { Item } from '../ponents';

and then use it:

<Item name='item1' />

本文标签: javascriptMultiple export with dot notationStack Overflow