2017-09-05 12 views
0

私はURLからIDを取得するために 'ダーティ'分割を行っています。私は私が私のルート反応ルータのurlからparamを取得

<Route exact path='/admin/ad/:id/edit' component={createTodoComponent} /> 

の1のために、この

this.__isEdit = (this.props.history.location.pathname.indexOf('edit') > -1) 

const pathnameArr = this.props.history.location.pathname.split('/') 
this.__todoId = pathnameArr[pathnameArr.length - 2] //get second last arr 

のような何かをした、ルータをどのように反応するか利用するためにはわからない。とにかく、私はそれを、コードを向上させることができますか?

+0

Reduxを使用していますか? –

+0

React-routerのどのバージョンを使用しますか –

+0

@ShubhamKhatri v4。 –

答えて

1

ですから、コンポーネントあなたからwithRouter方法でそれをラップする必要がありますは「反応-ルータ-DOMは」あなたがthis.props

import { withRouter } from 'react-router-dom' 

const component = ({match}) => { 
    const id = match.params.id 

    return (
     <span>{id}</span> 
    ) 
} 

export default withRouter(component) 

からのparamsのいずれかを取得したりしたい場合はすることができますReactコンポーネントクラスでそれを行うには

import { withRouter } from 'react-router-dom' 

class NewComponent extends Component { 
    render() { 
     const {match} = this.props 
     const id = match.params.id 

     return (
      <span>{id}</span> 
     ) 
    } 
} 

export default withRouter(NewComponent) 
+0

これは純粋なコンポーネントです。コンポーネントがクラスの場合はどうなりますか? –

+0

それは同じことです。コンポーネントクラスをwithRouterに渡し、this.props.match.params.id –

0

リアクションルータのパラメータは、接続されたコンポーネント内のthis.props.paramsで利用できます。

+0

を実行します。反応ルータv4にはありません –

関連する問題