Reactjs 使用相同的状态/获取从文章列表链接到文章详细信息
在所有文章列表中单击带有链接的标题时,尝试单独显示一篇文章的内容。我有下面的代码,它是有效的,但只有当我从列表中输入,而不是如果我输入整个url到spesific文章 ArticleList.jsReactjs 使用相同的状态/获取从文章列表链接到文章详细信息,reactjs,react-router,Reactjs,React Router,在所有文章列表中单击带有链接的标题时,尝试单独显示一篇文章的内容。我有下面的代码,它是有效的,但只有当我从列表中输入,而不是如果我输入整个url到spesific文章 ArticleList.js <div key={article.id}> <Link to={{ pathname: `/${article.slug}`, state: {article}, }}>{article.headline}</Li
<div key={article.id}>
<Link to={{
pathname: `/${article.slug}`,
state: {article},
}}>{article.headline}</Link>
<p>{article.summary}</p>
</div>
class ArticleDetail extends React.Component {
render() {
return (
<div id="current-article">
<h2>{this.props.location.state.article.headline}</h2>
<p>{this.props.location.state.article.content}</p>
</div>
);
}
}
ReactDOM.render((
<BrowserRouter>
<Switch>
<Route path="/:slug" component={ArticleDetail}/>
// The ArticleList component is imported in "App" with <ArticleList />
<Route exact path="/" component={App}/>
</Switch>
</BrowserRouter>
), document.getElementById('root'));
{文章标题}
{文章摘要}
ArticleDetail.js
<div key={article.id}>
<Link to={{
pathname: `/${article.slug}`,
state: {article},
}}>{article.headline}</Link>
<p>{article.summary}</p>
</div>
class ArticleDetail extends React.Component {
render() {
return (
<div id="current-article">
<h2>{this.props.location.state.article.headline}</h2>
<p>{this.props.location.state.article.content}</p>
</div>
);
}
}
ReactDOM.render((
<BrowserRouter>
<Switch>
<Route path="/:slug" component={ArticleDetail}/>
// The ArticleList component is imported in "App" with <ArticleList />
<Route exact path="/" component={App}/>
</Switch>
</BrowserRouter>
), document.getElementById('root'));
class ArticleDetail扩展了React.Component{
render(){
返回(
{this.props.location.state.article.headline}
{this.props.location.state.article.content}
);
}
}
index.js
<div key={article.id}>
<Link to={{
pathname: `/${article.slug}`,
state: {article},
}}>{article.headline}</Link>
<p>{article.summary}</p>
</div>
class ArticleDetail extends React.Component {
render() {
return (
<div id="current-article">
<h2>{this.props.location.state.article.headline}</h2>
<p>{this.props.location.state.article.content}</p>
</div>
);
}
}
ReactDOM.render((
<BrowserRouter>
<Switch>
<Route path="/:slug" component={ArticleDetail}/>
// The ArticleList component is imported in "App" with <ArticleList />
<Route exact path="/" component={App}/>
</Switch>
</BrowserRouter>
), document.getElementById('root'));
ReactDOM.render((
//ArticleList组件在“App”中导入时使用
),document.getElementById('root');
使用反应路由器。我相信这不是实现这一目标的正确方法,但经过数小时的搜索,我真不敢相信这么简单的事情会如此复杂。有人能给我指出一个正确的方向,找到一个不需要50行代码和3个外部库的合适的解决方案吗
谢谢你的时间和帮助
编辑
这显然不是我想要的,但在重定向中可能会更好。我是否必须在ArticleDetail组件中再次从API获取数据?该组件如何从ArticleList组件中的链接路径名获取${article.slug}?我认为最好的解决方案是使用slug,获取文章信息,然后呈现数据 在ArticleDetail组件中,使用this.props.location或this.props.match.param读取slug(或者只记录this.props以了解从何处可以获取路由参数)。在您知道什么是“slug”之后,您可以获取文章数据并显示它 这样,无论是在使用click on listItem还是在用户键入url时,您都可以在ArticleDetails页面中看到正确的数据 现在的错误是,当您访问页面并键入url时,您的props.location中没有状态,因为没有人在传递它。在您的列表中,您有状态,因此您可以正确查看ArticleDetail:
<Link to={{
pathname: `/${article.slug}`,
state: {article}, // <---
}}>{article.headline}</Link>
当您来自url时,尝试记录this.props.location.state。我认为这是未定义的,或者“article”对象是未定义的。@PaoloDell'Aguzzo是的,除非来自列表,否则状态是未定义的。“TypeError:this.props.location.state未定义”。只想在自己的视图中显示文章的内容,以及该内容在列表组件状态中的位置。(如果这不是实现此目的的正确方法,则不显示)。您的location.state显然未定义!谁将其传递给您的组件?在列表中,情况显然是您在Link.to中传递到的状态!!好的,是的,我明白你现在想说什么。我这样做的,现在它的工作。进行了新的获取,并将url传递给slug参数,其中包含“${this.props.match.params.slug}”的详细信息。好多了,谢谢。