react-总结9-反向代理-路径别名-react滚动-路由传参

反向代理

1.在src目录创建文件setupProxy.js文件 这是反向代理的配置文件
2.安装 http-proxy-middleware

/* 反向代理的配置文件 */
const proxy = require('http-proxy-middleware');

module.exports = function( app ){
    //app.use(proxy('标识符',配置))
   
    
    app.use( proxy('/ajax',{
        target:'http://m.maoyan.com',
        changeOrigin: true,
    }))

}

路径别名

在config-overrides.js中配置
使用第三方模块 customize-cra配置

function joinUrl(url){
    return path.join(__dirname,url)
}

addWebpackAlias({
        //路径别名  :对应的绝对路径
        '@': joinUrl('./src'),
        'pages': joinUrl('./src/pages'),
        'utils': joinUrl('./src/utils'),
        'style': joinUrl('./src/style'),
        'assets': joinUrl('./src/assets'),

    })

react滚动

better-scroll
布局要求 外层盒子套一个长列表

import BS from 'better-scroll'

在得到数据的钩子函数里实例化  放进异步队列
setTimeout(()=>{
	new BS('外层盒子类名')
},0)

路由传参

<Link
  to={{
    pathname: "/courses",
    search: "?sort=name",//可以通过 search携带参数
    state: { fromDashboard: true }//也可以通过state携带数据
  }}
/>

在这里插入图片描述

接参

通过目标路由的location对象来接收
如果 location里的search是

search:"?aid=20002&a=a"

可以使用 nodejs的内置模块处理得到json对象
nodejs使用的是commonjs规范  但是高版本的node 可以使用es6的引入规范
import qs from 'querystring'

qs.parse(search.slice(1))// {aid:'20002',a:'a'}

rem解决

阿里

(function(doc, win) {
  const docEl = doc.documentElement,
    resizeEvt = 'orientationchange' in window ? 'orientationchange' : 'resize',
    recalc = function() {
      const clientWidth = docEl.clientWidth;
      if (!clientWidth) return;
      let max = 24;
      let min = 9.3125;
      let size = 20 * (clientWidth / 320);

      size = Math.min(size, max);
      size = Math.max(size, min);
      docEl.style.fontSize = size + 'px';
      console.log(docEl.style.fontSize, 'em= =====')
    };
  if (!doc.addEventListener) return;
  win.addEventListener(resizeEvt, recalc, false);
  doc.addEventListener('DOMContentLoaded', recalc, false);
})(document, window);

淘宝

;(function(designWidth, maxWidth) {
  var doc = document,
  win = window,
  docEl = doc.documentElement,
  remStyle = document.createElement("style"),
  tid;

  function refreshRem() {
    var width = docEl.getBoundingClientRect().width;
    maxWidth = maxWidth || 540;
    width>maxWidth && (width=maxWidth);
    var rem = width * 100 / designWidth;
    remStyle.innerHTML = 'html{font-size:' + rem + 'px;}';
  }

  if (docEl.firstElementChild) {
    docEl.firstElementChild.appendChild(remStyle);
  } else {
    var wrap = doc.createElement("div");
    wrap.appendChild(remStyle);
    doc.write(wrap.innerHTML);
    wrap = null;
  }
  //要等 wiewport 设置好后才能执行 refreshRem,不然 refreshRem 会执行2次;
  refreshRem();

  win.addEventListener("resize", function() {
    clearTimeout(tid); //防止执行两次
    tid = setTimeout(refreshRem, 300);
  }, false);

  win.addEventListener("pageshow", function(e) {
    if (e.persisted) { // 浏览器后退的时候重新计算
      clearTimeout(tid);
      tid = setTimeout(refreshRem, 300);
    }
  }, false);

  if (doc.readyState === "complete") {
    doc.body.style.fontSize = "16px";
  } else {
    doc.addEventListener("DOMContentLoaded", function(e) {
      doc.body.style.fontSize = "16px";
    }, false);
  }
})(375, 750); 

网易

function font () {
  document.documentElement.style.fontSize = document.documentElement.clientWidth / 3.75 + 'px'
  /* 750/dpi/100 */
  /* dip = 物理像素【 750 】/逻辑像素 【 375 】 */
}


font()


window.onresize = font
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值