2017-04-21 5 views
0

私はルートパラメーター<Link to=を使用して:nameリンク:パラメータ

<Router> 
     <Switch> 
     <Route path="/" exact={true} component={Index} /> 
     <Route path="/about/:name" component={About} /> 
     <Route component={NotFound} /> 
     </Switch> 
    </Router> 

、インデックスからのリンクが正しくルート/about/vinnieを例えばすると、ルータの設定を反応させてきました。

ただし、<Link to=コンポーネントが[バージョン情報]ページにある場合、リンクをクリックするだけでブラウザのURLが更新されますが、正しいページが再描画されません。

これはなぜ起こっているのか?

About.jsx

render() { 

    const id = this.props.match.params.name; 

    return (
     <div className="Explore"> 
     <div className="container"> 

      <Api endpoint={[this._apiEndpoint(id, 'info')]} loadData={true}> 
      <CustomerInfo /> 
      </Api> 
... 

Api.jsx

render() { 
    let showData = this.props.loadData ? null : <button onClick={() => this._loadButton()}>Show</button>; 
    return (
     <span> 
     {this.props.children && React.cloneElement(this.props.children, { 
      apiData: this.state.rawData 
     })} 
     {showData} 
     </span> 
    ); 

}。

CustomerInfo.jsx

class CustomerInfo extends React.Component { 

    constructor(props) { 
    super(props); 
    this.state = { 
     CustomerInfo: {} 
    } 
    } 

    componentWillReceiveProps(nextProps) { 
    if (this.props.apiData !== nextProps.apiData) { 
     this.setState({CustomerInfo: nextProps.apiData[0]}); 
    } 
    } 

    render() { 
... 
+1

あなたは 'About'コンポーネントを共有できますか? – QoP

+0

@QoP私はこの例にもっと詳しく述べました。私は 'componentWillReceiveProps'を使ってCustomerInfo状態を更新している可能性がありますか? –

答えて

0

私はあなたの最初の<Route />exact小道具を追加する必要があると思います。さもなければあなたのルートはIndexとAboutと一致し、私はリアクションルータが意図的に両方をレンダリングすると思います。

+0

私は正確なタグを持っています、それは問題ではありません –

関連する問題