0

I'm trying to figure out why the component SubPage is not rendering whenever the route path of /sub/:_id is visited (e.g. /sub/5f1c54257ceb10816a13d999). This is the first time I've worked with react routes. The :_id part should presumably accept query parameters from the URL dynamically so I cannot see why this is not working.

I can get the /subs page to fetch the API and render each sub on the page but just not each individual sub page.

The route is as follows near the bottom of App.js: <Route path={"/sub/:_id"} component={SubPage} />

Thanks for any help here. I've made a stackblitz for convenience, or you can see the relevant code below:

And subPage.js:

import React from 'react'

export class SubPage extends React.Component {
    render() {
        return (
            <div className="sub-details-individual">
                <h1 class="std-intro">Viewing a Single Subscriber</h1>
                <div className="sub-specs">
                    <div className="sub-specs-inner">
                        id: {this.props.params._id}
                    </div>
                </div>
            </div>
        )
    }
}

And App.js:

import React, {Component} from "react";
import {navLinks} from "./components/nav-links";
import Root from "./components/Root";
import {
  BrowserRouter as Router,
  Switch,
  Route
} from "react-router-dom";
import {SubPage} from "./components/subPage";
import ShowSubs from "./components/show-subs";

export default class App extends Component {
  constructor() {
    super();

    this.state = {
      navLinks: navLinks,
      intro: "hello world",
      url: "someurl"
    }
  }

  updateURL = (newUrl) => {
    this.setState({
      url: newUrl
    })
  }

  render() {
    return (
      <Router>
        <Root navLinks={this.state.navLinks} intro={this.state.intro}></Root>

        <Switch>
          <Route path="/subs">
            <p>subs page</p>
            {/*this.updateURL('/subs') fails presumably because it causes the rerender infinitely - but how to solve?*/}
            <ShowSubs />
          </Route>
          <Route path="/">
            <p>homepage</p>
          </Route>
          <Route path={"/sub/:_id"} component={SubPage} />
        </Switch>
      
        <p>the url: {this.state.url}</p>
      </Router>
    );
  } 
}

1 Answer 1

2

Two things:

  • this.props.params._id will crash since you are missing match before params

this.props.match.params._id

  • few exact props are missing, especially in the subs path:

<Route exact path="/subs">

Note: the exact prop will be useful in the / route as well.

Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.