在滚动 reactjs 中更改路线

Posted

技术标签:

【中文标题】在滚动 reactjs 中更改路线【英文标题】:change route in scroll reactjs 【发布时间】:2017-05-26 22:43:01 【问题描述】:

我有一个问题,但我什至不知道如何解决它,我正在寻找如果我向下滚动,显示以下路线并向上滚动以显示以前的路线

希望有人指导

class Routes extends Component 
  render() 
    return (
      <Router history=browserHistory>
        <Route path='/' component=HomeLayout>
          <IndexRoute component=HomeComponent />
        </Route>
        <Route path='aps' component=AppServiceLayout>
          <IndexRoute  />
        </Route>
        <Route path='portfolio' component=portfolioLayout>
          <IndexRoute  />
        </Route>
        <Route path='about_us' component=aboutUsLayout>
          <IndexRoute  />
        </Route>        
        <Route path='*' component=HomeLayout>
          <IndexRoute component=NotFoundComponent />
        </Route>
      </Router>
    );
  

【问题讨论】:

呃什么?你是说当你滚动鼠标时你想让它改变路线? 是的,这可能吗? @FERNANDOORTIZ,你做到了吗?如果您提供有关如何实现此目的的代码 sn-p,那就太好了。 您好,您能否详细说明或举例说明您为实现此功能所做的工作? 【参考方案1】:

有一个 onScroll 事件可以用作触发器,这里有一篇关于如何确定它们是向上还是向下滚动的帖子:

How can I determine the direction of a jQuery scroll event?

这是一个关于如何以编程方式更改 React Route 的链接:

Programmatically navigate using react router

所以当他们滚动时,检查它是向上还是向下,然后相应地推动下一条/上一条路线。我不知道是否有任何内置功能可以在某个路线之前/之后立即获取路线,因此您可能只需要在某处列出它们作为参考

【讨论】:

【参考方案2】:

您可以使用 (react-router-dom useHistory) 更改滚动到结束后的路径。

import React from "react";
import ReactDOM from "react-dom";
import  HashRouter, useHistory  from "react-router-dom";

const Root = () => 
    const history = useHistory();

    function handleScroll(event) 
        var node = event.target;
        const down = node.scrollHeight - node.scrollTop === node.clientHeight;
        if (down) 
            history.push("/newPath");
        
    

    const paneDidMount = (node) => 
        if (node) 
            node.addEventListener("scroll", handleScroll);
        
    ;

    return (
        <div ref=paneDidMount style= overflowY: "scroll", maxHeight: "300px" >
            <section className="section" style= height: `100vh` >
                <h1>1</h1>
            </section>
            <section className="section" style= height: `100vh` >
                <h1>2</h1>
            </section>
        </div>
    );
;

ReactDOM.render(
    <HashRouter>
        <div>
            <Root></Root>
        </div>
    </HashRouter>,
    document.getElementById("root")
);

【讨论】:

以上是关于在滚动 reactjs 中更改路线的主要内容,如果未能解决你的问题,请参考以下文章

如何滚动 div 以在 ReactJS 中可见?

Reactjs - 路线中的“组件”与“渲染”

使用 Reactjs 获取滚动位置

在 ReactJS 中滚动嵌套组件

ReactJS:建模双向无限滚动

使用 ReactJS 和 Skeleton Css 滚动表格