react-router路由守衛(wèi)

安裝redux和react redux

index.js 用react-redux的Provider復(fù)合組件實(shí)現(xiàn)逐層傳參尘分,導(dǎo)入store作為要傳的參數(shù)
import React from "react";
import ReactDOM from "react-dom";
import "./index.css";
import App from "./App";
import { Provider } from "react-redux";
import store from "./store";

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

src/store/index.js 使用redux的createStore和combineReducers点寥,定義了reducer,傳給store
import { createStore, combineReducers } from "redux";

const initialUser = {
  isLogin: false,
  user: { name: null },
};
function loginReducer(state = { ...initialUser }, action) {
  switch (action.type) {
    case "getUserInfo":
      return { ...initialUser };
    case "loginSuccess":
      return { ...state, isLogin: true, user: { name: "xiaoming" } };
    default:
      return { ...initialUser };
  }
}
const store = createStore(
  combineReducers({
    user: loginReducer,
  }),
);

export default store;


src/pages/RouterPage.js 定義頁(yè)面和BrowserRouter,Link,Route
import React, { Component } from "react";
import {
  HashRouter,
  BrowserRouter,
  Link,
  Route,
  Switch,
} from "react-router-dom";
import HomePage from "./HomePage";
import UserPage from "./UserPage";
import PrivateRoute from "./PrivateRoute";
import LoginPage from "./LoginPage";

export default class RouterPage extends Component {
  render() {
    const id = 1235;
    return (
      <div>
        <h3>RouterPage</h3>
        <BrowserRouter>
          <Link to="/">首頁(yè)</Link>
          <Link to="/user">用戶(hù)中心</Link>
          <Link to={"/search/" + id}>搜索</Link>
          <Link to="/aaa">不知道的頁(yè)面</Link>

          <Switch>
            <Route
              exact
              path="/"
              component={HomePage}
              // children={() => <div>hah</div>}
              // render={() => <div>render</div>}
            />
            <Route exact path="/home" component={HomePage} />
            {/* <Route path="/user" component={UserPage} /> */}
            <PrivateRoute path="/user" component={UserPage} />
            <Route path="/login" component={LoginPage} />

            <Route path="/search/:id" component={Search} />

            <Route component={() => <div>404</div>} />
          </Switch>
        </BrowserRouter>
      </div>
    );
  }
}

function Search(props) {
  console.log("props", props);
  const { id } = props.match.params;
  return (
    <div>
      Search: {id}
      <Link to="/search/detail">{id}詳情</Link>
      <Route path="/search/detail" component={Detail} />
    </div>
  );
}

function Detail(props) {
  return <div>Detail</div>;
}

src/pages/PrivateRoute.js 點(diǎn)擊用戶(hù)中心 獲取登錄狀態(tài) 由于第一次是false 所以重定向到登錄頁(yè) 如果登錄狀態(tài)是true跳轉(zhuǎn)到用戶(hù)頁(yè)
import React, { Component } from "react";
import { Route, Redirect } from "react-router-dom";
import { connect } from "react-redux";

class PrivateRoute extends Component {
  render() {
    const { path, component, isLogin } = this.props;
    if (isLogin) {
      return <Route path="/user" component={component} />;
    }
    return (
      <Redirect
        to={{
          pathname: "/login",
          state: { redirect: path },
        }}
      />
    );
  }
}

export default connect(state => {
  return { isLogin: state.user.isLogin };
})(PrivateRoute);

src/pages/LoginPage.js 未登錄顯示登錄頁(yè)面 點(diǎn)擊登錄 重定向跳轉(zhuǎn)到user頁(yè)
import React, { Component } from "react";
import { connect } from "react-redux";
import { Redirect } from "react-router-dom";

class LoginPage extends Component {
  render() {
    const { isLogin, login, location } = this.props;
    const { redirect = "/" } = location.state || {};
    if (isLogin) {
      return <Redirect to={redirect} />;
    }
    return (
      <div>
        <h3>LoginPage</h3>
        <button onClick={login}>login</button>
      </div>
    );
  }
}

export default connect(
  state => {
    console.log(state);
    return { isLogin: state.user.isLogin };
  },
  {
    login: () => ({ type: "loginSuccess" }),
  },
)(LoginPage);

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市蛙奖,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖讳推,帶你破解...
    沈念sama閱讀 218,525評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異玩般,居然都是意外死亡银觅,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,203評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén)坏为,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)究驴,“玉大人,你說(shuō)我怎么就攤上這事匀伏∪饔牵” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 164,862評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵够颠,是天一觀的道長(zhǎng)熙侍。 經(jīng)常有香客問(wèn)我,道長(zhǎng),這世上最難降的妖魔是什么蛉抓? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,728評(píng)論 1 294
  • 正文 為了忘掉前任庆尘,我火速辦了婚禮,結(jié)果婚禮上巷送,老公的妹妹穿的比我還像新娘驶忌。我一直安慰自己,他們只是感情好惩系,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,743評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布位岔。 她就那樣靜靜地躺著,像睡著了一般堡牡。 火紅的嫁衣襯著肌膚如雪抒抬。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 51,590評(píng)論 1 305
  • 那天晤柄,我揣著相機(jī)與錄音擦剑,去河邊找鬼。 笑死芥颈,一個(gè)胖子當(dāng)著我的面吹牛惠勒,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播爬坑,決...
    沈念sama閱讀 40,330評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼纠屋,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了盾计?” 一聲冷哼從身側(cè)響起售担,我...
    開(kāi)封第一講書(shū)人閱讀 39,244評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎署辉,沒(méi)想到半個(gè)月后族铆,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,693評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡哭尝,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,885評(píng)論 3 336
  • 正文 我和宋清朗相戀三年哥攘,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片材鹦。...
    茶點(diǎn)故事閱讀 40,001評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡逝淹,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出桶唐,到底是詐尸還是另有隱情创橄,我是刑警寧澤,帶...
    沈念sama閱讀 35,723評(píng)論 5 346
  • 正文 年R本政府宣布莽红,位于F島的核電站,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏安吁。R本人自食惡果不足惜醉蚁,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,343評(píng)論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望鬼店。 院中可真熱鬧网棍,春花似錦、人聲如沸妇智。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,919評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)巍棱。三九已至惑畴,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間航徙,已是汗流浹背如贷。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,042評(píng)論 1 270
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留到踏,地道東北人杠袱。 一個(gè)月前我還...
    沈念sama閱讀 48,191評(píng)論 3 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像窝稿,于是被迫代替她去往敵國(guó)和親楣富。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,955評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容