React Routing

须鸿祯
2023-12-01

React Routing


  • Router Router 是放置 Route 的容器,其本身不定义 routing ,真正 routing 规则由 Route 定义。
  • Route Route 负责 URL 和对应的组件关系,可以有多个 Route 规则也可以有嵌套(nested)Routing。像下面的例子就是每个页面都会先载入 App 组件再载入对应 URL 的组件
  • history Router 中有一个属性 history 的规则,这边使用我们使用 hashHistory,使用 routing 将由 hash(#)变化决定。例如:当使用者拜访 http://www.github.com/,实际看到的会是 http://www.github.com/#/。下列范例若是拜访了 /about 则会看到 http://localhost:8008/#/about 并载入 App 组件再载入 About 组件。

hashHistory 会通过 hash 进行对应。好处是简单易用,不用多余设定。
browserHistory 适用于伺服器端渲染,但需要设定伺服器端避免处理错误,这部份我们会在后面的章节详细说明。注意的是若是使用 Webpack 开发用伺服器需加上 –history-api-fallback

$ webpack-dev-server --inline --content-base . --history-api-fallback

createMemoryHistory 主要用于伺服器渲染,使用上会建立一个存在记忆体的 history 物件,不会修改浏览器的网址位置。

const history = createMemoryHistory(location)

  • path path 是对应 URL 的规则。例如:/repos/torvalds 会对应到 /repos/:name 的位置,并将参数传入 Repos 组件中。由 this.props.params.name 取得参数。顺带一提,若为查询参数 /user?q=torvalds 则由 this.props.location.query.q 取得参数。
//常用书写方法
import React from 'react';
import ReactDOM from 'react-dom';
import { Router, Route, hashHistory, IndexRoute } from 'react-router';
import App from './components/App';
import Home from './components/Home';
import Repos from './components/Repos';
import About from './components/About';
import User from './components/User';
import Contacts from './components/Contacts';

ReactDOM.render(
  <Router history={hashHistory}>
    <Route path="/" component={App}>
      <IndexRoute component={Home} />
      <Route path="/repos/:name" component={Repos} />
      <Route path="/about" component={About} />
      <Route path="/user" component={User} />
      <Route path="/contacts" component={Contacts} />
    </Route>
  </Router>,
  document.getElementById('app')
);
//另一种书写方法
const routes = (
    <Route path="/" component={App}>
        <IndexRoute component={Home} />
        <Route path="/repos/:name" component={Repos} />
        <Route path="/about" component={About} />
        <Route path="/user" component={User} />
        <Route path="/contacts" component={Contacts} />
    </Route>
);

ReactDOM.render(
    <Router routes={routes} history={hashHistory} />,
    document.getElementById('app')
);
 类似资料:

相关阅读

相关文章

相关问答