javascript - 通过路由 react 传递对象?

标签 javascript reactjs react-router react-bootstrap react-router-dom

我想要做的是设置路由到我的对象。例如:

我为以下设置路由:

http://localhost:3000/projects

它显示我所有的项目列表(它工作得很好)

然后我想选择项目并查看详细信息,但它无法正常工作:
http://localhost:3000/projects/3

它的样子:

View of my projects list

当我点击 Details按钮,它会将我发送至 /projects:id但我得到一个错误,项目在 project未定义。

我的代码。我将所有路由存储在主 App.js 文件:
class App extends Component {
  render() {
    return (
      <div>
        <BrowserRouter>
          <div>
            <Route exact path="/projects" component={ProjectsList} />
            <Route exact path="/projects/:id" component={ProjectDetails} />
          </div>
        </BrowserRouter>
      </div>
    );
  }
}

export default App;

我有 ProjectsList.js组件(如果需要,我会包含它的代码),在 ProjectsList.js 中我有 的列表组Project.js 看起来像这样:
class Project extends Component {
  render() {
    return (
      <ButtonToolbar>
        <ListGroupItem>{this.props.project.name</ListGroupItem>
        <Link to={`/projects/${this.props.project.id}`}>
          <Button>Details</Button>
        </Link>
      </ButtonToolbar>
    );
  }
}
export default Project;

来自 Link to我的浏览器将我传递给正确的 URL(projects/2... 等),但我不知道如何传递 project 的对象至 ProjectDetails.js 成分。它的代码如下:
class ProjectDetails extends Component {
  render() {
    return <li>{this.props.project.description}</li>;
  }
}
export default ProjectDetails;

你能告诉我,如何传递project的对象吗?来自 Link to进入 ProjectDetails.js ?现在,我得到 description未定义(这是显而易见的,因为我没有将任何内容传递给带有详细信息的组件)。

最佳答案

在您的 route 使用渲染方法并传递 Prop 。

   <Route exact path="/projects/:id" render={() => (
         <ProjectDetails
         project = {project}
         />
   )}/>

关于javascript - 通过路由 react 传递对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53814650/

相关文章:

javascript - 需要覆盖axios post请求的默认超时时间

javascript - 我怎样才能history.pushState()然后立即转到URL栏中的页面?

reactjs - 使用 firebase 部署后 react 网站未显示

reactjs - React Router JWT 保护路由

javascript - MaterializeCSS 将多项选择菜单捆绑在一起

c# - JavaScript 不接受文本框的值

javascript - 加载 javascript 时无法传递参数(以数组形式)

javascript - 单击时平滑滚动到顶部并隐藏 <div>

reactjs - 阻止浏览器窗口尝试容纳 Appbar Tabs 中的项目,也许?

ios - 为什么在一个新的 react-native 项目之后会有很多弃用警告?