Ich habe ein Problem mit meiner React-Komponente. Die verschachtelten Kinder meiner Komponente ControlPanel
scheinen nicht gerendert zu werden. Hier ist mein Code:
class App extends Component {
render() {
return (
<div className="App">
<ControlPanel>
<CustomerDisplay />
</ControlPanel>
</div>
);
}
}
Ich habe die folgenden zwei Zeilen am Anfang dieser Datei:
import ControlPanel from './components/control_panel';
import CustomerDisplay from './components/customer_display';
Und hier ist meine ControlPanel
Komponente:
import React from 'react';
import CSSModules from 'react-css-modules';
import styles from './styles.scss';
const ControlPanel = () => {
return (
<div className="control_panel" id="control_panel">
</div>
);
}
export default CSSModules(ControlPanel, styles);
Ich habe versucht:
CustomerDisplay
in der Komponente ControlPanel
(in der Datei index.jsx der Variable ControlPanel
)Ich weiß, dass das Verschachteln von Komponenten möglich ist. Ich habe gesehen, wie es fertig ist. Aus irgendeinem Grund funktioniert es einfach nicht für mich.
Damit Komponenten untergeordnete Objekte enthalten und korrekt dargestellt werden können, müssen Sie this.props.children
verwenden. Dies wird an alle Komponenten mit Kindern als Requisite weitergegeben und enthält die Kinder der Komponente, wie in der React-Dokumentation erläutert:
Eindämmung
Einige Komponenten kennen ihre Kinder nicht rechtzeitig. Dies ist besonders häufig bei Komponenten wie
Sidebar
oderDialog
, die generische "Boxen" darstellen.Wir empfehlen, dass diese Komponenten die spezielle
children
-Eigenschaft verwenden, um untergeordnete Elemente direkt in ihre Ausgabe zu übergeben:function FancyBorder(props) { return ( <div className={'FancyBorder FancyBorder-' + props.color}> {props.children} </div> ); }
Dadurch können andere Komponenten durch Schachteln des JSX beliebige untergeordnete Elemente an sie übergeben
function WelcomeDialog() { return ( <FancyBorder color="blue"> <h1 className="Dialog-title"> Welcome </h1> <p className="Dialog-message"> Thank you for visiting our spacecraft! </p> </FancyBorder> ); }
Wie in der Dokumentation beschrieben, kennen einige Komponenten ihre Kinder nicht im Voraus. Es handelt sich möglicherweise um generische Wrapper oder um Inhaltskästen, die variieren. Dies ist Ihre ControlPanel
. Um die untergeordneten Elemente Ihrer Komponente darzustellen, müssen Sie die untergeordneten Elemente der children
-Komponente explizit in der render
-Methode des übergeordneten Objekts darstellen. Wenden Sie es daher wie folgt auf Ihren Code an:
const ControlPanel = (props) => {
return (
<div className="control_panel" id="control_panel">
{props.children}
</div>
);
}
Beachten Sie, wie props.children
gerendert wird (nicht this.props.children
, da es sich um eine Funktionskomponente handelt).
Sie können auf die verschachtelten Elemente über Requisiten zugreifen. Also in deinem Fall:
const ControlPanel = (props) => {
return (
<div className="control_panel" id="control_panel">
{props.children}
</div>
);
}
Sie müssen die Kinder in ControlPanel
rendern.
const ControlPanel = ({ children }) => {
return (
<div className="control_panel" id="control_panel">
{children}
</div>
);
}
Ihre App.js (ich verstehe, dass es sich um Ihren JSX-Index handelt) sollte
import React from 'react';
import ReactDOM from 'react-dom';
export default class App extends Component {
render() {
return (
<div className="App">
<ControlPanel>
<CustomerDisplay />
</ControlPanel>
</div>
);
}
}
ReactDOM.render(<App/>, document.getElementById('YOUR_ROOT_ID'));
Versuchen Sie, export default
vor class
(in allen Ihren Komponenten) hinzuzufügen.