2017-08-17 22 views
1

私はMobXを使用してReactとReact-routerでいくつかの注文を表示しています。リンクを使用しているとき、URLは変更されますが、ビューはレンダリングされません。ページをリフレッシュすると、そのように表示されます。しばらく検索したところ、shouldComponentUpdateが使用されているため、MobXオブザーバが再レンダリングをブロックすることがわかったhereが見つかりました。その小道具が変更され、再レンダリングを引き起こすはずだから、ロケーションメソッドを使ってみましたが、それは役に立たないようです。React-router URLはURLを変更しますが再レンダリングしません

また、withRouterを使用しようとしましたが、デコレータとして実装することはできませんでした。

更新this thread
デコレータが反応し、ルータを壊していると言ったのですか?

index.js

ReactDOM.render((
    <Provider {...stores}> 
    <BrowserRouter> 
     <App location={location} /> 
    </BrowserRouter> 
    </Provider> 
), 
    document.getElementById('root') 
); 

App.js

import React from 'react'; 
import {Switch, Route, withRouter} from 'react-router-dom'; 
import {Order} from './components'; 
import {AllOrders} from './containers'; 
import {inject, observer} from 'mobx-react'; 
import {isEmpty} from 'lodash'; 

const App = ({orders, location}) => { 
    console.log(location); 
    return(
    <Switch> 
     { 
     !isEmpty(orders) && <Route exact path="/orders" render={(props) => (<AllOrders {...props} orders={orders} />)} /> 
     } 
     { 
     !isEmpty(orders) && <Route path="/orders/:id" render={(props) => (<Order {...props} orders={orders} />)} /> 
     } 
    </Switch> 
) 
} 

export default inject(
    ({orderStore}) => ({ 
    orders: orderStore.orders 
    }) 
)(
    observer(App) 
); 
... withRouterが彼らのためにそれを修正使用して、それでも私は自分のコードの中にこれを実装する方法を知りません

AllOrders.js

class AllOrders extends Component{ 

    render(){ 
    const {orders} = this.props; 
    return(
     <div> 
     { 
      !isEmpty(orders) && 
      orders.map((props, key) => { 
      return(
       <Link to={`/orders/${props.id}`} key={key}>{props.id}<br /></Link> 
      ) 
      }) 
     } 
     </div> 
    ) 
    } 
} 

export default AllOrders; 
+0

に変更していましたあなたのルートを変更するとあなたのアプリケーションは再び現れますか? – GProst

+0

いいえ、位置のログは生成されません。リンクを含むコンポーネントも追加しました。 – Kevin

答えて

1

私のBrowserRouter内でコンポーネントAppを追加しました。代わりに、コンポーネントAppに渡されたRouteであったはずです。これによりルーティングが再び行われました。解決策は私のindex.jsを

関連する問題