私は次のようなことをしようとしていますが、nullを返します:
import { Button as styledButton } from 'component-library'
それを次のようにレンダリングしようとします:
import React, { PropTypes } from "react";
import cx from 'classNames';
import { Button as styledButton } from 'component-library';
export default class Button extends React.Component {
constructor(props){
super(props)
}
render() {
return (
<styledButton {...this.props}></styledButton>
)
}
}
その理由は、ライブラリからButton
コンポーネントをインポートし、インポートされたコンポーネントから機能を維持しながら同じ名前のラッパーコンポーネントもエクスポートする必要があるためです。もちろん、import { Button } from component library
のままにしておくと、複数宣言エラーが発生します。
何か案は?
構文は有効です。 JSXはReact.createElement(type)の構文シュガーであるため、typeが有効なReact typeである限り、JSXの「タグ」で使用できます。Buttonがnullの場合、インポートはそうではありませんたぶん、ボタンはコンポーネントライブラリからのデフォルトのエクスポートかもしれません。
import {default as StyledButton} from "component-library";
他の可能性は、ライブラリがcommonjsエクスポートを使用していることです。つまり、module.exports = foo
。この場合、次のようにインポートできます。
import * as componentLibrary from "component-library";
この方法でインポートしてみてください
import {default as StyledLibrary} from 'component-library';
エクスポートするとします
export default StyledLibrary
インポートをエイリアスできない理由がわかりません。
回避策として、私はこれを行うことになりました:
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>
)
}
}
皆さんありがとう
ユーザー定義のコンポーネントは大文字にする必要があります
https://reactjs.org/docs/jsx-in-depth.html#user-defined-components-must-be-capitalized
コードを変更します
import { Button as StyledButton } from 'component-library';
....bah...bah....bah
<StyledButton {...this.props}></StyledButton>
styledLibraryを大文字にしたときに機能したことに注意してください
一方、元の質問では、styledButtonを大文字にしなかったため機能しませんでした
これらは両方とも、Reactで期待される結果です
回避策を見つけられなかったので、(文書化された)React物事のやり方