Können Sie die es6-Import-Alias-Syntax für React-Komponenten verwenden?
Lesezeit: 4 Minuten
Ich versuche, etwas wie das Folgende zu tun, aber es gibt null zurück:
import { Button as styledButton } from 'component-library'
dann versuchen, es als zu rendern:
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>
)
}
}
Der Grund ist, dass ich die importieren muss Button Komponente aus einer Bibliothek und exportieren Sie auch eine Wrapper-Komponente mit demselben Namen, die jedoch die Funktionalität der importierten Komponente beibehält. Wenn ich es belasse import { Button } from component library dann erhalte ich natürlich einen mehrfachen Deklarationsfehler.
Irgendwelche Ideen?
Warum können Sie den Namen der Klassenschaltfläche nicht ändern?
– Ve
2. April 2017 um 19:46 Uhr
Die Reaktionskomponente sollte mit einem Großbuchstaben beginnen: nicht verwenden styledButton aber StyledButton
– Topmann
2. April 2017 um 19:47 Uhr
@Ved Ich verwende React-Styleguidist, um jede Komponente anzuzeigen, und muss alle Komponenten in die Komponentenbibliothek einschließen. Wenn ich den Klassen-Button-Namen ändere, wird die show code würde für jede Komponente im Playground unterschiedliche Namen haben.
– Magnum
2. April 2017 um 21:06 Uhr
Ja, wie @topheman sagte, der Alias-Name sollte in Pascal-Fall sein –> AliasName
– Aditya Patnaik
3. August 2020 um 11:55 Uhr
Chris
Ihre Syntax ist gültig. JSX ist Syntaxzucker für React.createElement(type). Solange der Typ ein gültiger React-Typ ist, kann er in JSX-„Tags“ verwendet werden. Wenn Button null ist, ist Ihr Import nicht korrekt. Vielleicht ist Button ein Standardexport aus der Komponentenbibliothek. Versuchen:
import {default as StyledButton} from "component-library";
Die andere Möglichkeit ist, dass Ihre Bibliothek commonjs-Exporte verwendet, dh module.exports = foo. In diesem Fall können Sie folgendermaßen importieren:
import * as componentLibrary from "component-library";
Aktualisieren
Da dies eine beliebte Antwort ist, hier noch ein paar Leckerbissen:
Hmm, scheint nicht zu funktionieren; Schaltfläche ist in der Bibliothek definiert als: import { ButtonCore } from 'react-atlas-core'; import { ButtonStyle } from 'react-atlas-default-theme'; export const Button = CSSModules(ButtonCore, ButtonStyle, {allowMultiple: true});
– Magnum
2. April 2017 um 20:26 Uhr
keine Verwendung des Standardexports; also habe ich KEINE AHNUNG, warum es nichts zurückgeben würde.
– Magnum
2. April 2017 um 20:27 Uhr
Ich würde wahrscheinlich neu bewerten, was Ihrer Meinung nach schief läuft, da diese Syntax und Ihre Absicht gültig sind. Was genau ist der Fehler, den Sie erhalten?
– Chris
2. April 2017 um 21:04 Uhr
Es gab keinen Fehler und alles wird ohne Fehler gerendert. Außer dass es keine gibt Button Funktionalität, die aus der Bibliothek importiert wird.
– Magnum
2. April 2017 um 21:08 Uhr
Versuchen Sie, auf diese Weise zu importieren
import {default as StyledLibrary} from 'component-library';
Ich nehme an, Sie exportieren
export default StyledLibrary
Vorsicht bei Groß- und Kleinschreibung. Am besten immer CamelCase.
Einer:
import Thing from "component";
Einer mit Pseudonym:
import {Thing as OtherThing} from "component";
Eine mit Alias plus andere Standardwerte:
import {Thing as OtherThing}, Stuff, Fluff from "component";
Ausführlicheres Beispiel
import
{Thing as StyledButton},
{Stuff as Stuffing},
{Fluff as Fluffy},
Wool,
Cotton
from "component";
Warum können Sie den Namen der Klassenschaltfläche nicht ändern?
– Ve
2. April 2017 um 19:46 Uhr
Die Reaktionskomponente sollte mit einem Großbuchstaben beginnen: nicht verwenden
styledButton
aberStyledButton
– Topmann
2. April 2017 um 19:47 Uhr
@Ved Ich verwende React-Styleguidist, um jede Komponente anzuzeigen, und muss alle Komponenten in die Komponentenbibliothek einschließen. Wenn ich den Klassen-Button-Namen ändere, wird die
show code
würde für jede Komponente im Playground unterschiedliche Namen haben.– Magnum
2. April 2017 um 21:06 Uhr
Ja, wie @topheman sagte, der Alias-Name sollte in Pascal-Fall sein –> AliasName
– Aditya Patnaik
3. August 2020 um 11:55 Uhr