【问题标题】:Problem to render a component dynamically with React Router使用 React Router 动态渲染组件的问题
【发布时间】:2019-05-14 17:45:36
【问题描述】:

我正在开发个人网站,但在使用 React Router 动态渲染组件时遇到问题。对我来说,一切似乎都是正确的,但由于某种原因,它不起作用。

我尝试遵循文档并观看了一些教程,但我已经卡了很长时间,所以我觉得我需要帮助。

在这个组件中,我想使用 id 动态渲染“Articles”组件

class JobCard extends Component {
  constructor(props) {
    super(props);
    this.state = {
      data: [],   
    };
  }

  componentWillMount() {
    fetch(url)
      .then(data => data.json())
      .then(result =>
        this.setState({
          data: result        
        })
      );
  }


  render() {

     const { match } = this.props;
      const { data, value } = this.state;

      return (
        <>
             <div>
                {results.map((job, id) => (
                  <div key={id}>
                    <div key={job._id} className="blog-card">
                      <div className="meta">
                        <div className="photo">
                          <img src={job.img} alt="logo" />
                        </div>    
                      </div>
                      <div className="description">
                        <h5>{job.position_name}</h5>
                        <p className="read-more">
                          <p>{job.location}</p>
                          <p>
                            <span className="learn-pow">
                              {" "}
                              <Link
                                to={{
                                  pathname: `${match.url}/${job._id}`,
                                  state: job
                                }}
                              >
                                {job.workplace_name}
                              </Link>{" "}
                             Enter Location
                            </span>
                          </p>
                        </p>
                      </div>
                    </div>

                  </div>
                ))}
              </div>
            }

            <Route path={`${match.path}/:id`} component={Articles} />
        </>
      );

  }
}

export default JobCard;

这是我要渲染的组件:


import React from 'react';

const Articles = ({ location }) => (
  <div>
    <h1>{location.state.name}</h1>
    <h2>{location.state.email}</h2>
    <h2>{location.state.place}</h2>
  </div>
)

export default Articles;

当我点击卡片时,URL 是正确的,所以我得到了 ID,但我无权访问文章组件。我试图控制台日志,但没有出现。

【问题讨论】:

  • 为什么你的组件中间有这个路由? &lt;Route path={${match.path}/:id} component={Articles} /&gt;?
  • 这是我要渲染的组件,不应该在那里吗?
  • 尝试将所有路由放在一个地方可能是 app.js
  • 也分享错误日志
  • 我没有报错,就是这个问题哈哈

标签: reactjs routing react-router


【解决方案1】:

不是这个

<Route path={`${match.path}/:id`} component={Articles} />

尝试这样做

<Route path={`${match.url}/:id`} component={Articles} />

【讨论】:

  • 感谢您的回答,我已经尝试过了,但我遇到了同样的问题。 id 在 url 中,但组件未呈现
  • JobCard里面,match的结果是什么?
  • {path: "/job", url: "/job", isExact: true, params: {…}} isExact: true params: {} path: "/job" url: "/job" 这是我的比赛记录
  • 您可能需要先尝试更新您的代码。您在 render 方法中访问 results.map,而不是在 this.state.data 上调用 .map
  • {this.state.data.map((job, id) =&gt; 你的意思是这样吗?不幸的是,我得到了同样的结果,我的 JobCard 组件渲染完美,但是当我点击获取文章时它不起作用。让我真正感到困惑的是,在网址上我得到了卡片的 ID http://localhost:3000/job/5ccc770c6ac54350001f0954
猜你喜欢
  • 2020-01-16
  • 2018-01-07
  • 2023-01-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-20
  • 1970-01-01
相关资源
最近更新 更多