【问题标题】:How to change title in Material UI ToolBar on page navigation in react js web application?如何在 React js Web 应用程序的页面导航中更改 Material UI ToolBar 中的标题?
【发布时间】:2021-07-29 18:31:14
【问题描述】:

我有反应功能组件 MainToolBar。在导航到其他页面(功能组件)时,我需要更改 MainToolBar 的标题。我怎么能那样做?使用 Context API 或 Redux 或任何其他简单的东西

下面是 MainToolBar.Js 的代码

 export default function MainToolBar() {
 const classes = useStyles();
      return (
        <div className={classes.root}>
          <AppBar position="static">
    <Toolbar>
    <Typography align="center" variant="h6" className ={classes.title}>
                ERP System
              </Typography>
              <Button color="inherit">Login</Button>
            </Toolbar>
          </AppBar>
        </div>
      );
    }

以下是 Thirdparty.js 的代码

       function ThirdParty() 
           {
         return (
            <div>
         <label>ThirdParty</label>            
            </div>
        )
    }
       export default ThirdParty
       layout.js
       import {
      BrowserRouter as ReactRouter,
      Switch as ReactSwitch,
      Route as ReactRoute,
    } from "react-router-dom";
    
 import ThirdParty from "./ThirdParty.js";
    
    export default function Layout() {
      return (
        <div>
          <ReactRouter>
            <MainToolBar />
              <ReactSwitch>
              <ReactRoute exact path="/" component={SignInUp}> 
              </ReactRoute>         
              <ReactRoute exact path="/thirdparty" component= 
              {ThirdParty}></ReactRoute>
            </ReactSwitch>
          </ReactRouter>
        </div>
      );
    }

【问题讨论】:

  • 所以让我再改一下。您有一个 AppBar,其中有一个名为 ERP System 的标题。现在,如果您转到其他路线,则希望根据组件对其进行更改。我说的对吗?
  • @dhellryder 是的,你说得对……!!!

标签: reactjs react-redux material-ui context-api


【解决方案1】:

Context APIredux 都是很好的解决方案。这样,您可以编写一个简单的效果挂钩来更新工具栏标题上下文/调度将更改它的 redux 操作。这个钩子将在由Route 组件呈现的主要组件内调用。

另一个解决方案,但可能不太一致,是为基于路径的可选工具栏标题创建一个映射对象。这样,您可以使用 react-router-dom useLocation 挂钩识别路径,并更改效果中的标题。例如,

import React, { useEffect, useState } from "react";
import { useLocation } from "react-router-dom";

const titles = {
  "/": "ERP System",
  "/thirdparty": "Third Party"
};

...
// Inside Toolbar component
const location = useLocation();
const [title, setTitle] = useState(titles["/"]);

useEffect(() => {
  setTitle(titles[location.pathname]);
}, [location.pathname]);

...

如果路径依赖于 ID 值,则效果内部需要更复杂的逻辑。

【讨论】:

  • 感谢您的回答和代码!我想知道使用 Redux 或 Context API 哪个更好
  • 在我看来,如果您的应用程序中已经有 redux,请使用 redux。如果没有,简单的上下文就足够了。
  • youtube.com/watch?v=lhMKvyLRWo0 是上下文 api 的好视频。只是为了像我这样的其他新手来帮助解决这个问题。
猜你喜欢
  • 2021-03-23
  • 2019-07-31
  • 2021-12-05
  • 1970-01-01
  • 2021-01-20
  • 1970-01-01
  • 2021-08-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多