【问题标题】:Manually entering a url refreshes whole react app手动输入一个 url 刷新整个反应应用程序
【发布时间】:2019-01-09 12:47:52
【问题描述】:

我正在开发一个使用 React 路由器的简单 React 应用程序。我的应用程序从 app.js 开始,并在 app.js 中设置了以下路由器:

<BrowserRouter>
  <MuiThemeProvider theme={theme}>
    <NavigationBar onLogout={self.userLoggedOut} loggedIn={self.state.loggedIn} />
    <div className="content-area container-fluid">
      <Switch>
        <Route exact path="/" component={HomePage} />
        <Route exact path="/login" component={LoginPage} />
        <Route exact path="/page1" component={Page1} />
        <Route exact path="/page2" component={Page2} />
      </Switch>
    </div>
  </MuiThemeProvider>
</BrowserRouter>

在我的 app.js 构造函数中,我有 console.log 来触发一条消息,说明构造函数已被调用。最初,我在第一次进入应用程序时看到消息触发,然后如果我使用链接在页面之间导航,我看不到任何后续消息。但是,如果我转到浏览器地址栏并手动输入 url(例如http://localhost:3000/login),页面加载成功,但来自 app.js 构造函数的消息会再次触发。如何让 react/react-router 应用程序接受与链接相同的手动输入的 url,从而使应用程序不会重新加载?

【问题讨论】:

  • 你不能这样做。两种情况都有区别
  • 这是 React Router 的限制吗?因为在 Gmail 中,您可以在浏览器的地址栏中输入 url,它不会重新加载应用程序。

标签: reactjs react-router react-router-v4


【解决方案1】:

在我的 app.js 构造函数中,我有 console.log 来触发一条消息 说构造函数被调用。最初我看到消息火了 第一次进入应用程序时,然后如果我使用链接导航 在页面之间我没有看到任何后续消息

这是 react 应用程序的一般行为。第一次调用链接时,您的 app.js 会进入树并被渲染。在渲染所有生命周期方法(包括构造函数)以固定顺序触发时,您可以看到日志,但是当您更改链接时,与内部路由对应的组件将被卸载,并且与新路由相关的组件被渲染,而不是完整的 app.js。这就是您再也看不到日志的原因。

如何让 react/react-router 应用程序接受手动输入 url 与链接相同,这样应用就不会重新加载?

您不能这样做,因为当您在地址栏中明确输入 url 时,您的浏览器不会将 url 与正在运行的 Web 应用程序相关联。它总是从一开始就呈现您的 Web 应用程序。因此,当它从头开始渲染时,您将始终得到该日志。

【讨论】:

  • 嗯,如果有人决定突然手动输入一个 url,那么推荐的维护状态的方法是什么?
  • 这完全取决于您的用例,如果您从第一页构建 redux 状态,或者您在输入的链接中使用某些状态并且您没有发现重定向到主页或显示一些错误页面因为您无法为路线提供所需的状态
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-11-10
  • 2011-08-11
  • 1970-01-01
  • 1970-01-01
  • 2018-12-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多