react+mobx实现兼容IE9的CMS系统过程中的经验总结

栏目: 服务器 · 发布时间: 5年前

内容简介:因为想要尝试用 mobx 并且也想自己试着搭建脚手架,所以在开发此项目时并没有使用比较成熟的脚手架比如:ant-design-pro,所以在开发过程中遇到了很多问题,在此记录,希望能帮助到其它开发者。

因为想要尝试用 mobx 并且也想自己试着搭建脚手架,所以在开发此项目时并没有使用比较成熟的脚手架比如:ant-design-pro,所以在开发过程中遇到了很多问题,在此记录,希望能帮助到其它开发者。

框架

经过此项目我将这个项目的脚手架开源,欢迎大家使用和提建议。

react-mobx-react-router-boilerplate

技术选型

  • create-react-app@2.1.1
  • react@16.6.0
  • mobx@4.5.2(5.x版本不支持IE9)
  • mobx-react@5.3.6
  • react-router-dom@4.3.1
  • antd由@2.x到@3.18.1

遇到的问题

浏览器兼容性

  • IE9 不支持 flex 布局
  • create-react-app 提供的 react-app-polyfill 只是对某些 ES6 的 API 做了兼容,所以用 @babel/polyfill 替代了 react-app-polyfill
  • dev 环境不支持 IE9:在 IE9 上打开 dev 环境发现了很多问题,不仅有 webpack-dev-server 存在的兼容性问题,还有一些其它第三方库存在的兼容性问题,主要有以下问题(因为问题太多所以最后我放弃了IE9下的dev环境):
    • 首先是 bundle.js 文件里报 const map 未定义是因为 webpack-dev-server 从 2.7.1 后不支持 IE9
    • 如果是 vendor.js 文件里报 setPrototypeOf 未定义是因为 create-react-app 引入的 react-dev-utils/webpackHotDevClient 文件里面有一个 chalk 的包使用了这个 ES6 的方法,而 @babel/polyfill 的编译是基于__proto__,而 IE9 并不支持__proto__,所 以@babel/polyfill 无效
  • 调试的时候保证是ie9的标准模式
  • 线上的项目无法在 IE9 上打开的原因:IE9 默认采用的文档模式是 IE7。解决方案:加入 <meta http-equiv="X-UA-Compatible" content="IE=edge"> ,注意顺序:
    The X-UA-Compatible header is not case sensitive; however, it must appear in the header of the webpage (the HEAD section) before all other elements except for the title element and other meta elements.
    
  • IE9 Spin 元素包裹的内容无法点击 原因:Spin 设置的 css 属性 pointer-events 不兼容IE9。解决方案:升级 antd
  • IE9 设置img height为百分比并不能像chrome浏览器里一样按比例缩放,只能设置width
  • IE9 上 css 样式没有浏览器前缀导致样式错误,原因 autoprefixer 对应的 browserslist 没写对没能将 IE9 包含进去
  • 默认使用 webkit 内核: <meta name="renderer" content="webkit" />

mobx

  • mobx-react observer 对传入的props做了浅比较,所以传递相同的值会有问题
  • 为了在生产环境不把mock文件打包进来,我是这么做的
    "start:no-mock": "cross-env REACT_APP_MOCK=none npm start"
    
    if (process.env.NODE_ENV === 'development' && process.env.REACT_APP_MOCK !== 'none') {
      import('../mock')
    }
    复制代码
  • HMR 导致修改之后 mobx 的数据都变成初始数据了:react-hot-loader 遇到更新的时候会 rerender 组件,之前的 hot 挂载在 App 上,App 里面用了 provider 去传递数据,每次 rerender 都会重新传数据,所以数据就变成初始的了,hot 方法包裹的组件应该不包括它

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

打造有吸引力的学习型社群

打造有吸引力的学习型社群

苏平、田士杰、吕守玉 / 机械工业出版社 / 45.00元

本书首先对社群的定位、准备和吸引粉丝方面等做了饶有趣味的介绍,从社群黏度的提升、社群知识的迭代与转化和社群的持续发展等多个角度入手,对学习型社群的运营手段、运营模式、运营规律和运营经验等进行了全方位剖析。从中国培训师沙龙这个公益社群近十年成功运营的经验中,为如何经营好学习型社群总结出了一套系统性的、具有实操价值的方法。并以此为基础,扩展到知识管理、团队管理、内容IP等领域,为有致于社团建设以及优质......一起来看看 《打造有吸引力的学习型社群》 这本书的介绍吧!

HTML 编码/解码
HTML 编码/解码

HTML 编码/解码

MD5 加密
MD5 加密

MD5 加密工具

RGB HSV 转换
RGB HSV 转换

RGB HSV 互转工具