Reactコンポーネント。コンポーネントのネストされた子ControlPanel
はレンダリングされていないようです。ここにコードがあります。
class App extends Component {
render() {
return (
<div className="App">
<ControlPanel>
<CustomerDisplay />
</ControlPanel>
</div>
);
}
}
このファイルの先頭には次の2行があります。
import ControlPanel from './components/control_panel';
import CustomerDisplay from './components/customer_display';
そして、ここに私のControlPanel
コンポーネントがあります:
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);
私が試してみました:
CustomerDisplay
コンポーネント内のControlPanel
コンポーネントのネスト(ControlPanel
のindex.jsxファイル内)コンポーネントのネストが可能であることを知っています。私はそれを見ました。何らかの理由でそれは私にはうまくいきません。
コンポーネントが子を含み、正しくレンダリングできるようにするには、this.props.children
を使用する必要があります。 React documentation :で説明されているように、これは子としてすべてのコンポーネントにプロップとして渡され、コンポーネントの子を含みます:
封じ込め
一部のコンポーネントは、事前に子を認識しません。これは、一般的な「ボックス」を表す
Sidebar
やDialog
などのコンポーネントで特に一般的です。そのようなコンポーネントは、特別な
children
propを使用して、子要素を出力に直接渡すことを推奨します:function FancyBorder(props) { return ( <div className={'FancyBorder FancyBorder-' + props.color}> {props.children} </div> ); }
これにより、JSXをネストすることにより、他のコンポーネントに任意の子を渡すことができます
function WelcomeDialog() { return ( <FancyBorder color="blue"> <h1 className="Dialog-title"> Welcome </h1> <p className="Dialog-message"> Thank you for visiting our spacecraft! </p> </FancyBorder> ); }
ドキュメントで説明されているように、一部のコンポーネントは事前にその子を認識していません。これらは、汎用ラッパーまたはさまざまなコンテンツのボックスである可能性があり、これがControlPanel
です。したがって、コンポーネントの子をレンダリングするには、親のchildren
メソッドでrender
プロップから子を明示的にレンダリングする必要があります。したがって、次のようにコードに適用します。
const ControlPanel = (props) => {
return (
<div className="control_panel" id="control_panel">
{props.children}
</div>
);
}
props.children
がどのようにレンダリングされるかに注意してください(関数コンポーネントであるためthis.props.children
ではありません)。
ネストされた要素には、小道具を介してアクセスできます。あなたの場合、これをしてください:
const ControlPanel = (props) => {
return (
<div className="control_panel" id="control_panel">
{props.children}
</div>
);
}
ControlPanel
の子をレンダリングする必要があります
const ControlPanel = ({ children }) => {
return (
<div className="control_panel" id="control_panel">
{children}
</div>
);
}
App.js(JSXインデックスであると理解しています)は次のようになります。
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'));
class
の前に(すべてのコンポーネントで)export default
を追加してみてください。