【问题标题】:Update document and app bar title when using React Router使用 React Router 时更新文档和应用栏标题
【发布时间】:2019-10-17 13:30:18
【问题描述】:

我正在研究在 TypeScript 应用程序中使用 react 路由器。 如何在 SPA 中更新文档标题 (document.title) 和应用栏标题 (<span className="appbartitle">Home</span>) 以响应路由器导航?

import React from 'react';
import {BrowserRouter as Router, Switch, Route, Link} from "react-router-dom";
import './App.css';

const App: React.FC = () => {
  return (
    <div className="App">
        <Router>
            <div className="appbar">
                <span className="appbartitle">Home</span>
                <span className="menuItem"><Link to="/">Home</Link></span>
                <span className="menuItem"><Link to="/about">About</Link></span>
                <span className="menuItem"><Link to="/dashboard">Dashboard</Link></span>
            </div>
            <Switch>
                <Route exact path="/"><Home /></Route>
                <Route path="/about"><About /></Route>
                <Route path="/dashboard"><Dashboard /></Route>
            </Switch>
        </Router>
    </div>
    );
}

export default App;

const Home = () => <div><h2>Home page</h2></div>;
const About = () => <div><h2>About page</h2></div>;
const Dashboard = () => <div><h2>Dashboard page</h2></div>;

【问题讨论】:

    标签: reactjs typescript react-router


    【解决方案1】:

    好吧,您可以在组件内部执行副作用。例如

    import React, {useEffect} from 'react';
    import {BrowserRouter as Router, Switch, Route, Link} from "react-router-dom";
    import './App.css';
    ...
    ...
    ...
    const Home = () => {
      useEffect(() => {
        // Update the document title using the browser API
        document.title = "[Your Title]";
        document.querySelector('.appbartitle').textContent = "[Your App Bar Title]"
      });
    
      return (<div><h2>Home page</h2></div>);
    }
    

    【讨论】:

    • 我明白了。我本来希望这个典型用例有一个更具反应性/声明性的解决方案。
    • 如果你想要声明式的方式来处理这个case,你可以参考github.com/gaearon/react-document-title/blob/master/index.js。它只是更改文档标题,但可以轻松改造以满足您的需求
    猜你喜欢
    • 2013-12-09
    • 2015-09-07
    • 2020-01-22
    • 1970-01-01
    • 2020-11-24
    • 1970-01-01
    • 1970-01-01
    • 2017-06-17
    • 1970-01-01
    相关资源
    最近更新 更多