nerv icon indicating copy to clipboard operation
nerv copied to clipboard

建议在nerv中自带prop-types

Open luanwulin opened this issue 6 years ago • 5 comments

因为nerv要兼容ie8,这样会导致很多依赖包只能用老版本,老版本的代码直接用的react的prop-types,这样会导致编译出错。 比如react-router最后一个兼容ie8的版本,2.3.0就会报错,直接就是使用的react的prop-types

这是其中某一段代码

export { falsy };
import { PropTypes } from 'react';

var func = PropTypes.func;
var object = PropTypes.object;
var arrayOf = PropTypes.arrayOf;
var oneOfType = PropTypes.oneOfType;
var element = PropTypes.element;
var shape = PropTypes.shape;
var string = PropTypes.string;

luanwulin avatar May 16 '18 01:05 luanwulin

请问路由应该使用哪个版本呀

qqw78901 avatar May 31 '18 09:05 qqw78901

抱歉我们之前在忙另一个项目,现在把 prop-types 加了进来。目前是一个空函数,不会起校验的效果 。 还得再想想有没有别的更好的办法。

现在 npm i nervjs@beta 再试一下。(版本号 1.3.0-beta.0)

yuche avatar May 31 '18 12:05 yuche

还缺了default.createClass, RouterContext里面有一段代码: var RouterContext = _react2.default.createClass({ 报错` RouterContext.js:43 Uncaught TypeError: _react2.default.createClass is not a function at Object../node_modules/react-router/lib/RouterContext.js (RouterContext.js:43) at webpack_require (bootstrap 5f88affe57815cffdd76:19) at Object../node_modules/react-router/lib/Router.js (Router.js:29) at webpack_require (bootstrap 5f88affe57815cffdd76:19) at Object../node_modules/react-router/lib/index.js (index.js:39) at webpack_require (bootstrap 5f88affe57815cffdd76:19) at Object../src/page/index.js (index.js:3) at webpack_require (bootstrap 5f88affe57815cffdd76:19) at Object.0 (index.js:18474) at webpack_require (bootstrap 5f88affe57815cffdd76:19)

` 有点好奇,文档上的支持API写的是支持creaClass,而实际上default里是没有的?

qqw78901 avatar Jun 01 '18 08:06 qqw78901

@qqw78901 createClass 是一个单独的包,和 prop-types 一样。

{
  // ...
  resolve: {
    alias: {
      'react': 'nervjs',
      'react-dom': 'nervjs',
      // Not necessary unless you consume a module using `createClass`
      'create-react-class': "nerv-create-class"
    }
  }
  // ...
}

其实你可以单独打出一个包:

// ./you-path/nerv-ie8.js
const Nerv = require('nervjs')
Nerv.createClass = require('nerv-create-class')
Nerv.PropTypes = require('prop-types')

module.exports = module.exports.default = Nerv

然后在你的 webpack 把 Nerv 或 React alias 到 ./you-path/nerv-ie8.js

yuche avatar Jun 01 '18 08:06 yuche

@yuche 用你单独打包的方法 报 Uncaught TypeError: Cannot set property PropTypes of #<Object> which has only a getter 还是建议给个带router的demo吧

dunhuang avatar Jun 21 '18 09:06 dunhuang