美文网首页
学习日志1

学习日志1

作者: 成熟稳重的李先生 | 来源:发表于2021-04-15 21:12 被阅读0次

2020.09.21, 1. 复习了contextAPI(Provider/Consumer);
2. 高阶组件(传入一个组件,返回一个新组件, 比如logger组件),特别要注意的是静态方法,可以通过继承来保留之前的静态方法, ref也比较特殊,可以通过逼得props来传递,比如重命名为myRef,然后在源组件中通过props.myRef来获取(ref是一个特殊的属性,类似的有key,它们不在props中)

  1. react-router-dom, react的路由库,基本上是这样的结构:
import { HashRouter, Route, Link } from 'react-router-dom';
ReactDOM.render(
  <HashRouter>    /*路由的包裹容器*/
    <>
      <ul>
        <li>
          <Link to="/"></Link>
        </li>
        <li>
          <Link to="/user"></Link>
        </li>
        <li>
          <Link to="/profile"></Link>
        </li>
      </ul>
      <Route path="/" component={Home} />
      <Route path="/user" component={User} />
      <Route path="/profile" component={Profile} />
    </>
  </HashRouter>,
  document.getElementById('root')
);
  1. path-to-regexp,这个包是用来匹配路由的,普通用法就只是匹配路由是否相等,稍微高阶的,就是取路径参数(子组件中,this.props.match.params.xxx
  2. 路由权限, 组件Protected用来表示权限路由,(原理大约是: 当路由渲染时,路径匹配到之后,先找组件的component属性,能找到的话,就用component渲染,找不到的话,就找它的render属性)
//Protected.js
import React from 'react';

export default (props) => {
  let { path, component: RouteComponent } = props;
  return (
    <Route
      path={path}
      render={(props) =>
        localStorage.getItem('logined') ? (
          <RouteComponent {...props} />
        ) : (
          <Redirect
            to={{
              pathname: '/login',
              state: { from: props.location.pathname },
            }}
          />
        )
      }
    />
  );
};
  1. 渲染一个Route有三种方式
 //优先级 1>2>3
1. component  组件
2. render  函数 (路径匹配才渲染)
3. children  函数  (不管路径匹不匹配都渲染),应用于MenuLink,如果路径匹配的话,会有match,否则没有match属性

接下来,介绍children

import React from 'react';
import { Route, Link } from 'react-router-dom';
export default (props) => {
  let { to, exact, children } = props;
  return (
    <Route
      path={typeof to == 'object' ? to.pathname : to}
      exact={exact}
      children={(childProps) => ( //匹配到后,给link加active类来得到高亮效果
        <Link to={to} className={childProps.match ? 'active' : ''}>{children}</Link>; 
      )}
    ></Route>
  );
};
  1. withRouter
    withRouter可以讲一个不在router系统中的组件,纳入到router系统中。
    实现原理如下:
import React from "react";
import {Route} from "./";
export default function(OldComponent) {
  return () => <Route component={OldComponent}/>
}
//使用时
import React from "react";
import {withRouter} from "react-router-dom";
class Demo extends React.Component {  //demo组件是脱离router系统的,因此,它本来是不能使用history的
  render (
    return (
      <div onClick={this.props.history.push('/')}>logo</div>
    )
  )
}

export default withRouter(Demo);
  1. browserRouter
    browserRouter是浏览器路由,HashRouter是hash路由,HashRouter监听hashchange事件, browserRouter监听的是浏览器的popStatepushState

相关文章

  • java学习笔记-日志篇

    java学习笔记-日志篇-目录 java日志篇(1)-日志概述 java日志篇(2)-JUL(java.util....

  • 学习日志1

    交换才是这个世界的普世价值,笑容会换来笑容,尊重别人才能赢得尊重。

  • 学习日志1

    1.安装数据库 yum -yinstall mariadb-server mariadb 启动数据库服务: sys...

  • 学习日志1

    2020.09.21, 1. 复习了contextAPI(Provider/Consumer);2. 高阶组件(...

  • 改变常规思维—销售·答疑课

    【崔律·销售答疑课·学习日志】这是2019年4月4日“崔律精时力”课之“销售·答疑课” 的学习日志。<学习日志>1...

  • 古筝学习日志1

    已经38岁,不知道还能不能学会古筝? 先学着再说吧,哈哈,谁知道明天的世界会是什么样子?喜欢的事,...

  • ionic学习日志1

    登录时进行相关信息保存:if(this.user.password=="1"){ //page3页中 l...

  • Python学习日志1

    用的是macOS,研究了半天才发现自带Python,看的书不是Python入门,直接是看机器学习附录的Python...

  • 三一学习日志1

    今天是参加21天站桩活动的第一天,一早起来看站桩视频,跟着老师的语音站桩,去体会身体的变化,去关注呼吸。 今天也是...

  • 《没有干不好的销售》——你的影响力超乎想象

    一、“崔律精时力”课之“改变常规思维的好书·1《没有干不好的销售》”的学习日志。 <学习日志> 1.我过去的旧认知...

网友评论

      本文标题:学习日志1

      本文链接:https://www.haomeiwen.com/subject/mdpbyktx.html