Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

z75/cnv

Repository files navigation

Build Status License Coverage Status Downloads Build Status Sauce Test Status

Nerv是一款基于虚拟DOM技术的JavaScript(TypeScript)库,它提供了与React 16一致的使用方式与API,并且拥有更高的性能表现、更小的包大小以及更好的浏览器兼容性

English

特性

⚛ 与React保持一致的API,不需要 nerv-compat

️⚔ 久经战斗洗礼,已经应用于京东PC首页京东旗下TOPLIFE

⚡️ 强劲的性能

🤣 IE8兼容

🎯 更小尺寸, 9Kb gziped

🌗 支持客户端与服务端同构渲染

💫 支持React 16的新特性, 例如错误处理, Portals, 自定义DOM属性等等.

相关NPM包

本项目采用Lerna对多个NPM包进行维护管理,包括:

NPM包 介绍
nervjs Nerv库
nerv-redux Nerv与Redux结合,类似react-redux
nerv-devtools 提供对React Developer Tool的支持
nerv-server 提供服务端渲染支持
nerv-test-utils Nerv应用测试套件
nerv-utils Nerv内部帮助方法集
nerv-shared Nerv内部shared方法集
nerv-create-class createClass API支持

快速开始

CodeSandbox Playground是最简单的开始使用Nerv的方式。并且如果你已经使用过React,你就已经知道如何来使用Nerv了。

安装

当然我们推荐使用 WebpackBabel 来使用Nerv。首先你需要安装Nerv

With npm

$ npm install --save nervjs

With yarn

$ yarn add nervjs

使用

然后就可以引入Nerv了,Nerv同时提供了作为命名空间默认导出和多个方法导出两种使用方式

默认导出作为命名空间:

import Nerv from 'nervjs'
class HelloMessage extends Nerv.Component {
 render() {
 return <div>Hello {this.props.name}</div>
 }
}
Nerv.render(
 <HelloMessage name="Nerv" />,
 document.getElementById('app')
)

多个方法单独导出:

import { Component, render } from 'nervjs'
class HelloMessage extends Component {
 render() {
 return <div>Hello {this.props.name}</div>
 }
}
render(
 <HelloMessage name="Nerv" />,
 document.getElementById('app')
)

☝️ 更多信息请移步到官方 开发文档

示例

从React切换成Nerv

从React切换成使用Nerv非常方便,只需要将reactreact-dom 重命名成 nervjs,而不需要任何的代码变动。

使用Webpack

在你的 webpack.config.js 文件增加一个 alias 配置:

{
 // ...
 resolve: {
 alias: {
 'react': 'nervjs',
 'react-dom': 'nervjs',
 // 除非你想使用 `createClass`,否则这一条配置是没有必要的
 'create-react-class': "nerv-create-class"
 }
 }
 // ...
}

使用Babel

通过安装这个babel插件来进行重命名

$ npm install --save-dev babel-plugin-module-resolver

并且在 .babelrc 中进行配置

{
 "plugins": [
 ["module-resolver", {
 "root": ["."],
 "alias": {
 "react": "nervjs",
 "react-dom": "nervjs",
 // 除非你想使用 `createClass`,否则这一条配置是没有必要的
 "create-react-class": "nerv-create-class"
 }
 }]
 ]
}

使用Browserify

安装重命名转换工具

$ npm i --save-dev aliasify

然后在你的 package.json 文件中加入配置

{
 "aliasify": {
 "aliases": {
 "react": "nervjs",
 "react-dom": "nervjs"
 }
 }
}

适配React

当前Nerv支持的React API与特性

react

  • React.createClass (legacy)
  • React.createElement
  • React.cloneElement
  • React.Component
  • React.PureComponent
  • React.PropTypes
  • React.Children
  • React.isValidElement
  • Error Boundaries (React 16)

react-dom

  • React.unstable_renderSubtreeIntoContainer (legacy)
  • ReactDOM.render
  • ReactDOM.unmountComponentAtNode
  • ReactDOM.findDOMNode
  • ReactDOM.hydrate (React 16)
  • ReactDOM.createPortal (React 16)

IE8兼容

首先, 安装 es5-polyfill

npm install --save es5-polyfill

然后在你的代码文件中引用它

require('es5-polyfill')

最后如果你使用 babel 的话,配置 .babelrc

{
 "presets": [
 ["env", {
 "spec": true,
 "useBuiltIns": false
 }],
 ["es3"]
 ],
 ...
}

开发者工具Developer Tools

Nerv提供了一个开发者工具模块来帮助你使用React Chrome Developer Tools 插件。

使用Nerv时开启开发者工具,需要安装 nerv-devtools 包,然后在初始化的 Nerv.render() 方法调用之前引用这个包 require('nerv-devtools')

if (process.env.NODE_ENV !== 'production') {
 require('nerv-devtools')
}
// 在 Nerv.render()调用之前
Nerv.render(<App />, document.getElementById('#root'))

nerv-devtools

特别鸣谢

凹凸实验室(京东-多终端研发部)

License

FOSSA Status

About

Nerv.js的中文化API wrapper/binding

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages

  • JavaScript 69.5%
  • TypeScript 29.6%
  • Other 0.9%

AltStyle によって変換されたページ (->オリジナル) /