【问题标题】:Using material ui tabs with react router?使用带有反应路由器的材料ui选项卡?
【发布时间】:2020-12-09 15:24:29
【问题描述】:

我在 react/typescript 中有一个项目。我有一个看起来像这样的反应路由器

const Root = () => (
    <>
      <NavBar/>
      <Router>
        <Route path="/" component={Home} />
          <Route path="/timer" component={TimerPage} />
      </Router>
    </>
);

我有一个 Material-ui 应用栏,看起来像这样

export default function NavBar() {
  return (
      <div>
        <AppBar position="static">
          <Tabs>
              <Tab label="Timer" to="/timer" component={TimerPage}  />
          </Tabs>
        </AppBar>
      </div>
  );
}

有几个问题 - 首先 Tab 中的“to”无法编译。其次,鉴于它们做的事情非常相似,我如何让这两个组件协同工作?

【问题讨论】:

标签: javascript reactjs typescript material-ui


【解决方案1】:

如果您尝试导航到另一个页面,请包装您的选项卡组件,让 react-router 处理导航并使用 react-router 历史记录导航,

 <Tabs value={value} onChange={handleChange} aria-label="simple tabs 
     example">
   <div onClick={() => history.push("/timer")}>
        <Tab   label="Timer" />
    </div>
  </Tabs>

【讨论】:

    【解决方案2】:
    <Router>
            <Route path="/" component={Home} />
            <Route path="/timer" component={TimerPage} />
    </Router>
    

    Route 应该在 Switch 内。此外,如果您写path="/",这意味着您将访问的任何页面仍将转到“主页”页面。这是因为 react-router 做了类似“最少”的路由检查。因此,如果您在"/images/1" 之前定义了路径"/images",两者都会将您路由到"/images"。相反,您可以更改这些路径的顺序,或在第一个路径之前添加 exact 关键字。

    看看下面的例子。

    <Router>
        <Switch>
            <Route exact path="/" component={Home} />
            <Route path="/timer" component={TimerPage} />
        </Switch>
    </Router>
    

    <Router>
        <Switch>
            <Route path="/timer" component={TimerPage} />
            <Route path="/" component={Home} />
        </Switch>
    </Router>
    

    至于你的第二个问题,你应该把你的AppBar(或div或任何容器)放在Router中,并将Link分配给componentTab的属性:

    <Router>
        <AppBar position="static">
              <Tabs>
                  <Tab label="Timer" to="/timer" component={Link}  />
              </Tabs>
        </AppBar>
    </Router>
    

    请记住,Link 组件是从 react-router 导入的,而不是从 @mui 导入的。

    【讨论】:

      猜你喜欢
      • 2020-03-07
      • 1970-01-01
      • 1970-01-01
      • 2022-01-19
      • 2019-04-15
      • 2020-01-15
      • 2020-11-30
      • 2020-11-29
      • 1970-01-01
      相关资源
      最近更新 更多