gpt4 book ai didi

javascript - React-router:将 Prop 传递给 child

转载 作者:行者123 更新时间:2023-11-27 23:34:19 25 4
gpt4 key购买 nike

我正在尝试通过使用react-router构建一个非常基本的“组合”网站来学习React。我的主要组件是:应用程序、工作、项目和项目详细信息。在“工作”页面上,您应该能够看到所有项目缩略图和标题。单击特定项目应会将您转到该项目的详细信息页面,其中将包括该项目的其余详细信息。如何将 Project 的 props 传递给 ProjectDetail?

我的文件:

main.js
/*
Routes
*/

var routes = (
<Router history={createHistory()}>
<Route path="/" component={App}>
<IndexRoute component={Work} />
<Route path="work" component={Work} />
<Route path="work/:id" component={ProjectDetail} />
<Route path="about" component={About} />
</Route>
</Router>
);

ReactDOM.render(routes, document.getElementById('main'));

-

App.js
/*
App
*/


class App extends React.Component {
render() {
return (
<div>
<h1>App</h1>
<ul>
<li><Link to="/">Home</Link></li>
<li><Link to="/work">Work</Link></li>
<li><Link to="/about">About</Link></li>
</ul>
{this.props.children}
<footer>footer</footer>
</div>
)
}
}

export default App;

-

Work.js
class Work extends React.Component {
render() {
return (
<div>
<p>Work</p>
<ul>
{/* Need to loop of all projects */}
{PROJECTS.map(project => (
<li key={project.id}>
<Project project={project} />
</li>
))}
</ul>
</div>
)
}
}

export default Work;

-

Project.js
class Project extends React.Component {
render() {
var project = this.props.project;
var linkTo = "/work/" + project.id;

return (
<Link to={linkTo}>
{project.title}
<span> </span>
{project.type}
</Link>
)
}
}

export default Project;

-

ProjectDetail.js
class ProjectDetail extends React.Component {
render() {
return (
<div>
{/* THIS IS WHAT INFORMATION I NEED */}
{this.props.project.title}
{this.props.project.description}
{this.props.project.type}
{this.props.project.technologies}
</div>
)
}
}

export default ProjectDetail;

我可以访问 Project 组件中的数据,但由于我从未明确使用 ProjectDetail 组件(仅在我的路由中使用),因此如何将其传递给 ProjectDetail?

编辑:我应该补充一点,我想从技术上讲我并不是试图将 Prop 传递给子项,因为一旦您路由到 ProjectDetail,项目就不再呈现。这是否使得这变得不可能?

最佳答案

您需要使用createElement路由处理程序来控制路由处理程序的实例。在那里你可以将 props 传递给组件。 React-Router解耦了母子组件,任何状态传播都需要在路由中完成。

更新根据您的编辑,在您的情况下,ProjectDetail 必须使用 this.props.params.id 重新查询适用的项目,例如...

ProjectDetail.js

class ProjectDetail extends React.Component {
render() {
let project = PROJECTS.find((item)=>item.id == this.props.params.id);
return (
<div>
{project.title}
{project.description}
{project.type}
{project.technologies}
</div>
)
}
}

关于javascript - React-router:将 Prop 传递给 child ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34262526/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com