Can you use es6 import alias syntax for React Components?

前端 未结 6 1905
抹茶落季
抹茶落季 2021-01-30 12:35

I\'m trying to do something like the following, however it returns null:

import { Button as styledButton } from \'component-library\'

then atte

相关标签:
6条回答
  • 2021-01-30 13:11

    Try to import this way

    import {default as StyledLibrary} from 'component-library';
    

    I suppose you export

    export default StyledLibrary
    
    0 讨论(0)
  • 2021-01-30 13:12

    No idea why I am not able to alias the import;

    As a work around, I ended up doing this:

    import React, { PropTypes } from "react";
    import * as StyledLibrary from 'component-library';
    
    export default class Button extends React.Component {
        constructor(props){
            super(props)
        }
        render() {
            return (
                <StyledLibrary.Button {...this.props}></StyledLibrary.Button>
            )
        }
    }
    

    Thanks all

    0 讨论(0)
  • 2021-01-30 13:21

    Careful with capitalisation. Best to always CamelCase.

    One:

    import Thing from "component";
    

    One with alias:

    import {Thing as OtherThing} from "component";
    

    One with alias plus other defaults:

    import {Thing as OtherThing}, Stuff, Fluff from "component";
    

    More detailed example

    import
    {Thing as StyledButton},
    {Stuff as Stuffing},
    {Fluff as Fluffy},
    Wool,
    Cotton
    from "component";
    
    0 讨论(0)
  • 2021-01-30 13:21

    note that when you capitalized StyledLibrary and it worked

    whereas, in the original question, you did not capitalize styledButton and it did not work

    both of these are the expected results with React

    so you didn't discover a workaround, you simply discovered the (documented) React way of doing things

    0 讨论(0)
  • 2021-01-30 13:28

    Your syntax is valid. JSX is syntax sugar for React.createElement(type) so as long as type is a valid React type, it can be used in JSX "tags". If Button is null, your import is not correct. Maybe Button is a default export from component-library. Try:

    import {default as StyledButton} from "component-library";
    

    The other possibility is your library is using commonjs exports i.e. module.exports = foo. In this case you can import like this:

    import * as componentLibrary from "component-library";
    

    Update

    Since this is a popular answer, here a few more tidbits:

    export default Button              -> import Button from './button'
                                          const Button = require('./button').default
             
    export const Button                -> import { Button } from './button'
                                          const { Button } = require('./button')
             
    export { Button }                  -> import { Button } from './button'
                                          const { Button } = require('./button')
             
    module.exports.Button              -> import { Button } from './button'
                                          const { Button } = require('./button')
    
    module.exports.Button = Button     -> import { Button } from './button'
                                          const { Button } = require('./button')
    
    module.exports = Button            -> import * as Button from './button'
                                          const Button = require('./button')
    
    
    0 讨论(0)
  • 2021-01-30 13:31

    User-Defined Components Must Be Capitalized
    https://reactjs.org/docs/jsx-in-depth.html#user-defined-components-must-be-capitalized

    change your code to

    import { Button as StyledButton } from 'component-library';
    ....bah...bah....bah  
    <StyledButton {...this.props}></StyledButton>
    
    0 讨论(0)
提交回复
热议问题