Day18. Redux回顾&邂逅React路由

2020-07-20  本文已影响0人  JackLeeVip

Redux收尾

const reducer = combineReducers({
  counterInfo: counterReducer,
  homeInfo: homeReducer
})
内部帮助执行.png

combineReducer的原理

image.png

React中的state如何管理

后续想要补充的东西

Redux回顾

单向数据流

  1. React官方中有提到单向数据流, 组件之前数据的传递, 组件树, 数据在进行共享的时候只能从上往下传递, 像水流一样流到下面. 通过props进行数据的传递
  2. Vue和React中组件内部都有单向数据流的概念; 在同一个组件里面, 有UI界面, 产生一个action, 有可能会修改State,


    image.png
  3. Redux中, 一个固定的流程, 组件中发生事件, dispatch(action), 形成一个闭环, 整个过程中不能越级


    不能越级.png

TransitionGroup的警告问题

React-router的使用

路由的由来

阶段一: 后端路由(渲染)阶段

阶段二: 前后端分离阶段

阶段三: 单页面富应用(SPA)

单页面富应用.png

-目前比较多的是处于第三个阶段, 单页面富应用

前端路由的原理

前端路由的核心:

  1. 改变URL, 但使页面不要进行强制刷新(a元素不行)
  2. 自己来监听URL的改变, 并且改变之后自己改变页面的内容

URL的hash

window.addEventLIstener("hashchange", () => {
  switch (location.hash) {
    case: "#/home":
      routerViewEl.innerHTML = "首页";
      break;
    case "#/about":
      routerViewEl.innerHTML = "关于";
      break;
    default:
      routertViewEl.innerHTML = "";
  }
})
image.png

HTML5的history

// 1. 获取reouter-view的DOM
const routerViewEl = document.getElementsByClassName("router-view")[0];

// 获取所有的a元素, 自己来监听a元素的改变
const aEls = document.getElementsByTagName("a");
for (let el of aEls) {
  el.addEventListener("click", e => {
    e.preventDefault();
    const href = el.getAttribute("href");
    console.log("a元素发生了点击");
    history.pushState({}, "", href);
  })
 }

// 执行返回操作时, 依然来到urlChange
window.addEventListener("popState", urlChange);
// window.addEventListener("go", urlChange);// 手动执行go时监听

// 监听URL的改变
function urlChange() {
   switch (location.pathname) {
    case: "/home":
      routerViewEl.innerHTML = "首页";
      break;
    case "/about":
      routerViewEl.innerHTML = "关于";
      break;
    default:
      routertViewEl.innerHTML = "";
  }
}
image.png

react-router

Router的基本使用

<HashRouter>
  <Link to="/" >首页</Link>
  <Link to="/about" >关于</Link>
  <Link to="/profile" >我的</Link>

  <Route exact path="/" component={Home} />
  <Route path="/about" component={About} />
  <Route path="/profile" component={Profile} />
</HashRouter>

coderwhy的React核心技术与开发实战课程链接

少年~来做同学呀~.png
上一篇 下一篇

猜你喜欢

热点阅读