代码之家  ›  专栏  ›  技术社区  ›  Kevin

反应路由器链接更改URL但不重新发送

  •  2
  • Kevin  · 技术社区  · 7 年前

    我正在使用MobX通过React和React router呈现一些订单。当我使用链接时,URL会发生变化,但视图不会呈现。当我刷新页面时,视图是应该的。我搜索了一会儿,发现 here MobX观察器阻止了重新渲染,因为它使用shouldComponentUpdate。我尝试使用定位方法,因为该属性会发生变化,并应触发重新渲染,但这似乎没有帮助。

    我也试着使用withRouter,但作为一名装饰师,我没有实现。


    在里面 this thread

    指数js公司

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

    应用程序。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)
    );
    

    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;
    
    1 回复  |  直到 7 年前
        1
  •  4
  •   Kevin    7 年前

    在我的BrowserRouter中,我添加了组件应用程序,相反,它应该是通过组件应用程序的路由。这使路由再次工作。解决方案是更改我的索引。js收件人

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