React-router锚点跳转的解决方案

本文记录了使用react的时候想要实现锚点跳转的解决方案。

传统解决方案


    

跳到这里

用这种传统的方式,如果是基于browserHistory,路径上加了hash值,但是并不会跳转到想要的锚点位置。

localhost:3000/demo#scroll

如果是基于hashHistory,虽然会跳转到想要的锚点位置,但是路径改变了。

localhost:3000/#/demo
=>
localhost:3000/#/scroll

基于browserHistory的解决方案

solugebefola提出的解决方案

scrollToAnchor() {
    let anchorName = this.props.location.hash;
    if (anchorName) {
        anchorName = anchorName.replace("#","");
        let anchorElement = document.getElementById(anchorName);
        if(anchorElement) { anchorElement.scrollIntoView(); }
    }
}

但是如果基于hashHistory的,就不能通过hash值来判断

基于hashHistory的解决方案

不能用hash值,那就只能通过query的方式来实现啦~

scrollToAnchor() {
    let anchorName = t.props.location.query.anchorName;
    if (anchorName) {
        let anchorElement = document.getElementById(anchorName);
        if(anchorElement) { anchorElement.scrollIntoView(); }
    }
}

Support

React-router锚点跳转的解决方案_第1张图片
scrollIntoView

你可能感兴趣的:(React-router锚点跳转的解决方案)