react helmet change reactjs react-router

reactjs - helmet - React. Parámetros del paso del enrutador al componente



react meta tags (7)

Además de la respuesta de Alexander Lunas ... Si desea agregar más de un argumento, utilice:

<Route path="/details/:id/:title" component={DetailsPage}/> export default class DetailsPage extends Component { render() { return( <div> <h2>{this.props.match.params.id}</h2> <h3>{this.props.match.params.title}</h3> </div> ) } }

const rootEl = document.getElementById(''root''); ReactDOM.render( <BrowserRouter> <Switch> <Route exact path="/"> <MasterPage /> </Route> <Route exact path="/details/:id" > <DetailsPage /> </Route> </Switch> </BrowserRouter>, rootEl );

Estoy intentando acceder al ID en el componente DetailsPage pero no se puede acceder. Lo intenté

<DetailsPage foo={this.props}/>

Pasar parámetros a la página de detalles, pero en vano.

export default class DetailsPage extends Component { constructor(props) { super(props); } render() { return ( <div className="page"> <Header /> <div id="mainContentContainer" > </div> </div> ); } }

¿Alguna idea de cómo pasar la identificación a la página de detalles?


Aquí está la versión mecanografiada. funciona en "react-router-dom": "^4.3.1"

export const AppRouter: React.StatelessComponent = () => { return ( <BrowserRouter> <Switch> <Route exact path="/problem/:problemId" render={props => <ProblemPage {...props.match.params} />} /> <Route path="/" exact component={App} /> </Switch> </BrowserRouter> ); };

y componente

export class ProblemPage extends React.Component<ProblemRouteTokens> { public render(): JSX.Element { return (<div>{this.props.problemId}</div>); } }

donde ProblemRouteTokens

interfaz de exportación ProblemRouteTokens {problemId: string; }


Otra solución es usar un estado y ganchos de ciclo de vida en el componente enrutado y una declaración de búsqueda en la propiedad to del componente <Link /> . Más adelante se puede acceder a los parámetros de búsqueda a través de los new URLSearchParams() ;

<Link key={id} to={{ pathname: this.props.match.url + ''/'' + foo, search: ''?foo='' + foo }} /> <Route path="/details/:foo" component={DetailsPage}/> export default class DetailsPage extends Component { state = { foo: '''' } componentDidMount () { this.parseQueryParams(); } componentDidUpdate() { this.parseQueryParams(); } parseQueryParams () { const query = new URLSearchParams(this.props.location.search); for (let param of query.entries()) { if (this.state.foo!== param[1]) { this.setState({foo: param[1]}); } } } render() { return( <div> <h2>{this.state.foo}</h2> </div> ) } }


Si desea pasar apoyos a un componente dentro de una ruta, la forma más sencilla es utilizar el render siguiente manera:

<Route exact path="/details/:id" render={(props) => <DetailsPage globalStore={globalStore} {...props} /> } />

Puedes acceder a los accesorios dentro de la DetailPage usando:

this.props.match this.props.globalStore

Los {...props} son necesarios para pasar los props de la Ruta original, de lo contrario solo obtendrás this.props.globalStore dentro de la DetailPage .


Usa el componente:

<Route exact path="/details/:id" component={DetailsPage} />

Y deberías poder acceder a la id usando:

this.props.params.id

Dentro del componente DetailsPage


Utilicé esto para acceder a la ID en mi componente:

<Route path="/details/:id" component={DetailsPage}/>

Y en el componente de detalle:

export default class DetailsPage extends Component { render() { return( <div> <h2>{this.props.match.params.id}</h2> </div> ) } }

Esto hará que cualquier ID dentro de un h2, espero que ayude a alguien.


Utilice el método de render:

<Route exact path="/details/:id" render={(props)=>{ <DetailsPage id={props.match.params.id}/> }} />

Y deberías poder acceder a la identificación usando:

this.props.id

Dentro del componente DetailsPage