首页 > 其他分享 >React 中使用React-Router

React 中使用React-Router

时间:2023-03-06 18:14:20浏览次数:52  
标签:const require 使用 js React import Routes Router

React-Router帮助我们实现单页应用的路由跳转功能

1. 简单路由

  • src/pags/home.js
const Home = () => {
  return (
    <div>Home</div>
  );
};
  • src/Routes.js
import React from 'react';
import { Router, Route, browserHistory } from 'react-router';

import Home from './pages/Home.js';
import About from './pages/About.js';
import NotFound from './pages/NotFound.js';

const history = browserHistory;
const Routes = () => (
  <Router history={browserHistory}>
    <Route path="home" component={home} />
    <Route path="about" component={About} />
    <Route path="*" component={NotFound} />
  <Router>
);

export default Routes;
  • src/index.js
import React from 'react';
import ReactDOM from 'react-dom';
import Routes from './Routes.js';

ReactDOM.render(
  <Routes />,
  document.getElementById('root')
);

2. 路由的链接和嵌套

  • src/TopMenu/index.js
import React from 'react';
import {Link} from 'react-router';
const view = () => {
  return (
    <div>
      <ul>
        <li style={liStyle}><Link to="/home">Home</Link></li>
        <li style={liStyle}><Link to="/about">About</Link></li>
      </ul>
    </div>
  );
};

export { view };
  • src/pages/App.js
import React from 'react';
import { view as TopMenu } from '../components/TopMenu';
const App = ({children}) => {
  return (
    <div>
      <TopMenu />
      <div>{children}</div>
    </div>
  );
};
export default App;
  • src/Routes.js
// IndexRoute 设置默认路由
const Routes = () => (
  <Router history={history}>
    <Route path="/" component={App}>
      <IndexRoute component={Home} />
      <Route path="home" component={home} />
      <Route path="about" component={About} />
      <Route path="*" component={NotFound} />
    </Route>
  <Router>
);

3. 集成Redux

ReactDOM.render(
  <Provider store={store} >
    <Routes />
  </Provider>,
  document.getElementById('root')
);

使用react-router-redux同步浏览器url和Redux状态

import {routerReducer, syncHistoryWithStore } from 'react-router-redux';
const reducer = combine({
  routing: routerReducer
});

// 将browserHistory与Store关联
const history = syncHistoryWithStore(browserHistory, store);

4. 动态加载分片

完成动态加载分片要两个方面:

  • 使用require.ensure让webpack产生分片打包文件;
  • 使用React-Router的getComponent异步加载页面分片文件

src/Routes.js

const getHomePage = (location, callback) => {
  require.ensure([], function(require) {
    callback(null, require('./pages/Home.js').default);
  }, 'home');
};

const getAboutPage = (location, callback) => {
  require.ensure([], function(require) {
    callback(null, require('./pages/About.js').default);
  }, 'about');
};

const getNotFoundPage = (location, callback) => {
  require.ensure([], function(require) {
    callback(null, require('./pages/NotFound.js').default);
  }, '404');
};
const Routes = () => (
  <Router history={history} createElement={createElement} >
    <Route path="/" component={App}>
      <Route path="home" getComponent={getHomePage} />
      <Route path="about" getComponent={getAboutPage} />
      <Route path="*" getComponent={getNotFoundPage} />
    </Route>
  </Router>
);

动态更新Store的reducer和状态

import {combineReducers} from 'redux';
const getCounterPage = (nextState, callback) => {
  require.ensure([], function(require){
    const { page, reducer, stateKey, initialState} = require('./pages/counterPage.js');
    const state = store.getState();
    store.reset(combineReducers({
      ...store._reducers,  // 原始的reducer
      counter: reducer
    }), {
      ...state,
      [stateKey]: initialState
    });
    callback(null, page);
  }, 'counter');
};

标签:const,require,使用,js,React,import,Routes,Router
From: https://www.cnblogs.com/xiaodi-js/p/17184847.html

相关文章

  • 使用python多线程检测ip地址
    #检测得ip地址在C:\Users\admin\Desktop\iplist.txt文件中importsubprocessimportthreadingimportIPyimportrefromqueueimportQueueimporttimeip_use=[]#检......
  • tcpdump使用指南
    全网最详细的tcpdump使用指南 今天要给大家介绍的一个Unix下的一个 网络数据采集分析工具,也就是我们常说的抓包工具。与它功能类似的工具有wireshark,不同的......
  • stegsolve与zsteg的使用
    zsteg介绍:用来检测PNG和BMP中隐藏数据的工具,可以快速提取隐藏信息使用环境:kalikali自带zsteg,可以用这个指令使用geminstallzsteg下载完之后查看使用方法sudozsteg......
  • SpringBoot+Vue中使用AES进行加解密(加密模式等对照关系)
    场景若依前后端分离版本地搭建开发环境并运行项目的教程:https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/108465662在上面搭建起来前后端架构之后,在前后端......
  • 安卓NDK本地开发中使用logcat打印日志
    配置在需要打印日志的文件中添加以下头文件和宏定义#include<android/log.h>#defineLOGD(...)__android_log_print(ANDROID_LOG_INFO,"LOG_TAG",__VA_ARGS__)#de......
  • Docker使用socks5代理
    Docker网络Http代理设置背景在一些实验室环境,服务器没有直接连接外网的权限,需要通过网络代理。我们通常会将网络代理直接配置在/etc/environment、/etc/profile之类的配......
  • react-router-dom V6路由参数
    一、标签组件  1.search方式    <Linkto={'/main/dataForm?id=123&name=aa'}>导航</Link>    <Linkto={{pathname:'/main/dataForm',search:`?id=123&na......
  • ASP.NET Core 使用app.UseStaticFiles配置静态文件中间件,达到类似IIS中虚拟目录的效果
    1、项目中静态文件存放在wwwroot文件夹之下,如下:要访问nihao.jpg这个文件夹,url路径可以这样写:<imgsrc="~/images/inhao.jpg"alt="pic"/>wwwrootcssimagesnihao.jpgjs那......
  • Linux中v4l2-utils 工具的使用
    v4l2-utils工具的使用一、安装v4l2-utilssudoapt-getinstallv4l-utils二、工具的使用2.1列出相关的camera设备v4l2-ctl--list-devices2.2列出某个camera的......
  • JUnit4基本使用
    JUnit4的配置和基本使用配置1.从网上下载jar包,导入Eclipse中从maven仓库中下载,官网https://mvnrepository.com/artifact/junit/junit导入Eclipse中,导入流程右键项目......