zoukankan      html  css  js  c++  java
  • React路由配置

    React路由简单配置

    //入口文件index.js
    import React from 'react';
    import ReactDom from 'react-dom';
    import { Router, Route, BrowserRouter,Switch } from 'react-router-dom';
    import createBrowserHistory from "history/createBrowserHistory";
    import routeTest from './pages/routeTest';
    import Home from './Home';
    
    const history = createBrowserHistory();
    ReactDom.render(
        <Router history={history}>
            <Switch>
                <Route path='/' exact component={Home} />
                <Route path='/hooksDemo' exact component={routeTest} />
            </Switch>
        </Router >,
        document.getElementById('app')
    );
    • Router的history是必需的props
    • Router中只能有一个子元素
    • Switch:只渲染第一个与当前地址匹配的<Route>
    • Route的props path为路径,component为路径对应的页面,exact精确匹配
      这是一个简单的路由配置,可以实现页面的简单跳转,但是如果页面比较多,可以把页面组件引入和Route组件提取出来,以保证入口页面良好的可阅读性。

    多页面路由配置

    //将页面引入和Route组件提取到./App.js
    import React from 'react';
    import { Router, Route, Switch } from 'react-router-dom';
    import PropTypes from 'prop-types';
    import routeTest from './pages/routeTest';
    import Home from './Home';
    
    const App = ({ history }) => (
        <Router history={history}>
            <Switch> 
                <Route exact path='/' exact component={Home} />
                <Route exact path='/hooksDemo' exact component={routeTest} />
            </Switch>
        </Router>
    );
    App.propTypes = {
        history: PropTypes.shape({}).isRequired
    };
    export default App;
    // ./index.js
    import React from 'react';
    import ReactDom from 'react-dom';
    import { Router, Route, BrowserRouter,Switch } from 'react-router-dom';
    import createBrowserHistory from "history/createBrowserHistory";
    import App from './App';
    
    const history = createBrowserHistory();
    ReactDom.render(
        <App history={history} />,
        document.getElementById('app'),
    );
    • 这样一来,当项目比较大,页面很多的时候,页面引入和Route定义的部分都被拆分到./App.js中,./index.js只需引入./App.js即可。

    使用react-redux的路由配置

    使用react-redux时,需要store进行状态管理,使用Provider组件注入store

    • ./store,js创建storeTree
    ./store.js
    import { createStore, combineReducers, applyMiddleware } from 'redux';
    import thunk from 'redux-thunk';
    import routeTestReducer from 'pages/routeTest/indexRedux';
    
    const storeTree = combineReducers({
        routeTestReducer
    });
    const store = createStore(storeTree, applyMiddleware(thunk));
    export default store;
    • ./index.js使用Provider组件传递store
    ./index.js
    import React from 'react';
    import ReactDom from 'react-dom';
    import { Router, Route, BrowserRouter,Switch } from 'react-router-dom';
    import createBrowserHistory from "history/createBrowserHistory";
    import { Provider } from 'react-redux';
    import store from './store';
    import App from './App';
    
    const history = createBrowserHistory();
    ReactDom.render(
        <Provider store={store}>
            <App history={history} />
        </Provider>,
        document.getElementById('app'),
    );

    Demo源码地址:https://github.com/wuhuaranran/react-demo-

  • 相关阅读:
    Atitit. 查找linux 项目源码位置
    Atitit.用户权限服务 登录退出功能
    Atitit.js javascript的rpc框架选型
    Atitit.php  nginx页面空白 并返回500的解决
    Atitit .linux 取回root 密码q99
    Atitit.报名模块的管理
    Atitit.基于时间戳的农历日历历法日期计算
    Atitit.excel导出 功能解决方案 php java C#.net版总集合.doc
    我的博客开通了
    (转)列举ASP.NET 页面之间传递值的几种方式
  • 原文地址:https://www.cnblogs.com/chaoxiZ/p/9983083.html
Copyright © 2011-2022 走看看