Prevent react-router history.push from reloading current route

前端 未结 5 1657
青春惊慌失措
青春惊慌失措 2021-02-19 08:55

I\'m taking my first steps with react-router.

I\'m currently using the hashHistory for development purposes and I\'m performing \'manual\' nav

5条回答
  •  栀梦
    栀梦 (楼主)
    2021-02-19 09:36

    My guess is that your component re-renders because something in your prop changes when you make a router push. I suspect it might be the action or key properties of prop.location. You could always check all the values of prop during each render to see what changes.

    You can solve this issue by comparing your old route path with the new one in the shouldComponentUpdate life-cycle method. If it hasn't changed you are on the same route, and you can prevent the re-rendering by returning false. In all other cases, return true. By default this always returns true.

    shouldComponentUpdate: function(nextProps, nextState) {
      if(this.props.route.path == nextProps.route.path) return false;
      return true;
    }
    

    You'll have to make further checks as well as this will prevent your component from updating on state updates within the component as well, but I guess this would be your starting point.

    Read more about shouldComponentUpdate on the official react docs page.

    Use this as an opportunity to return false when you're certain that the transition to the new props and state will not require a component update.

提交回复
热议问题