我被困住了。我在单独的文件上有几个单独的组件。如果我在main.jsx中渲染它们,如下所示:
ReactDOM.render(<LandingPageBox/>, document.getElementById("page-landing"));
ReactDOM.render(<TopPlayerBox topPlayersData={topPlayersData}/>, document.getElementById("wrapper profile-data-wrapper"));
ReactDOM.render(<RecentGamesBox recentGamesData={recentGamesData}/>, document.getElementById("history wrapper"));
一切正常,但我不知道这是不是一个好习惯?也许有可能做一些像只有一个ReactDom.render的事情:
ReactDOM.render(<LandingPageBox recentGamesData={recentGamesData} topPlayersData={topPlayersData}/>, document.getElementById("page-landing"));
我尝试了不同种类的LandingPageBox变种以某种方式包含其他两个组件,但没有运气。它们有时会在页面外呈现,依此类推。我认为应该看起来像这样:
import React from 'react';
import RecentGames from '../RecentGames/RecentGames.jsx';
import TopPlayers from '../TopPlayers/TopPlayers.jsx';
import PageTop from './PageTop.jsx';
import PageBottom from './PageBottom.jsx';
class LandingPageBox extends React.Component {
render() {
return (
<body className="page-landing">
<PageTop>
<TopPlayers topPlayersData={this.props.topPlayersData} />
</PageTop>
<PageBottom>
<RecentGames recentGamesData= {this.props.recentGamesData}/>
</PageBottom>
</body>
);
}
}
export default LandingPageBox;
但是这段代码只渲染PageTop和PageBottom,没有播放器或游戏组件。
所以我的问题是,如何设置LandingPageBox文件,以便TopPlayers组件在PageTop组件内呈现,而RecentGames组件将在PageBottom组件内呈现?谢谢。
答案 0 :(得分:30)
在你的例子中
return (
<body className="page-landing">
<PageTop>
<TopPlayers topPlayersData={this.props.topPlayersData} />
</PageTop>
<PageBottom>
<RecentGames recentGamesData= {this.props.recentGamesData}/>
</PageBottom>
</body>
);
React只会渲染顶级自定义组件PageTop
和PageBottom
,正如您已经发现的那样。其他组件(TopPlayers
和RecentGames
)在这些组件中嵌套。那是什么意思? React不仅显示那些嵌套组件,因为它不知道如何执行此操作。相反,所有渲染必须由外部组件PageTop
和PageBottom
完成。 React只是将嵌套的组件传递给它们(PageTop
得到TopPlayers
,PageBottom
得到RecentGames
)this.props.children
。现在直到外部组件如何处理这些嵌套组件。在您的示例中,您将修改PageTop
和PageBottom
组件以使用{this.props.children}
以合适的方式显示其嵌套组件。
答案 1 :(得分:23)
你是对的。您可以根据需要使用任意数量的嵌套组件。这是反应中的主要概念之一。
您可以在this.props.children
中访问它们。
这样做:
var Parent = React.createClass({
render: function() {
return <div>{this.props.children}</div>;
}
});
ReactDOM.render(
<Parent>
<Child/>
<Child/>
</Parent>,
node
);
在此处阅读更多内容 - https://facebook.github.io/react/docs/multiple-components.html
答案 2 :(得分:0)
此处Car组件位于另一个组件(即Garage组件)内部。 当渲染Garage组件时,Car组件也被渲染。 就像一个函数在另一个函数中一样。
class Car extends React.Component {
render() {
return <h2>I am a Car!</h2>;
}
}
class Garage extends React.Component {
render() {
return (
<div>
<h1>Who lives in my Garage?</h1>
<Car />
</div>
);
}
}
ReactDOM.render(<Garage />, document.getElementById('root'));