首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何添加加载屏幕以响应路由器的模糊匹配?

如何添加加载屏幕以响应路由器的模糊匹配?
EN

Stack Overflow用户
提问于 2019-01-09 13:12:33
回答 2查看 621关注 0票数 0

应用程序组件

代码语言:javascript
复制
function App() {
  const links = ["page-1", "page-2", "page-3"].map(item => {
    return (
      <Link key={item} to={"/" + item}>
        {item}
      </Link>
    );
  });

  return (
    <BrowserRouter>
      <>
        <nav>
          <Link to="/">Home</Link>
          {links}
        </nav>

        <div className="app">
          <Switch>
            <Route exact path="/" component={Home} />
            <Route path="/:pagename" component={Page} />
          </Switch>
        </div>
      </>
    </BrowserRouter>
  );
}

页面组件

代码语言:javascript
复制
Page extends Component {
  constructor(props) {
    super(props);

    this.state = { loading: true };

    setTimeout(() => {
      this.setState({ loading: false });
    }, 500);
  }

  render() {
    return this.state.loading ? (
      <h1>Loading...</h1>
    ) : (
      <h1>{this.props.match.params.pagename}</h1>
    );
  }
}

问题

我想要一个加载屏幕时,反应之间的页面切换。从"/“开始没有问题。但是,在"/page-1“和"/page-2”之间切换时,尽管使用了setTimeOut()函数,它并不显示加载屏幕。

当我第一次切换回"/“时,它就能工作了。A.k.a.从"/page-1“到"/”,再到"/page-2“。当从"/page-1“切换到"/page-2”时,如何使加载屏幕显示?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-01-09 13:30:32

使用的组件是相同的,因此只会发生重呈现。构造函数将不再被调用。

对于这些情况,我建议尝试进入componentWillRecieveProps并检查pagename参数是否正在改变:

代码语言:javascript
复制
componentWillReceiveProps(nextProps) {
    if(this.props.match.params.pagename !== nextProps.match.params.pagename) {
        this.setState({ loading: true });
        setTimeout(...);
    }
}
票数 0
EN

Stack Overflow用户

发布于 2019-01-09 13:30:46

因为正在加载相同的组件,所以您可以尝试这一点--我还没有测试过这段代码,但我认为这是可行的

代码语言:javascript
复制
Page extends Component {
 constructor(props) {
 super(props);

 this.state = { loading: true };
}

componentWillReceiveProps(nextProps){
 this.setState({ loading: true });
 setTimeout(() => {
   this.setState({ loading: false });
 }, 1000);
}

render() {
  return this.state.loading ? (
     <h1>Loading...</h1>
     ) : (
     <h1>{this.props.match.params.pagename}</h1>
  );
 }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54110983

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档