基于 React 的构建无线 Web 应用框架
基于 React 的构建无线 Web 应用框架 在 webpack 配置中,需要添加 alias 将 使用 React Web 组件,需要在我们的组件中去 HasteResolverPlugin 插件就为你做了这件事情,它会: 你可以在每个组件顶部注释发现类似 加载模块的两种方式: 这种引用方式看起来像是我们在使用原生的 react-native 的方式: 我们像在 Node.js 中一样 require 模块,并通过解构赋值的写法,使得一些组件可以在当前文件的作用域中被引用。 也就是说,如果我们这样定义了,每次应用组件时就可以直接: 而不用: 但实际上在 react-web 中这样引用就比较与众不同了: 我们 与此同时,这种形式的写法会把所有的组件一次性引入进来,包括 ReactAppRegistry/ReactView/... 等等,即使有些组件并没有应用到。 这里我们按需 require 封装后的组件:ReactAppRegistry/ReactView/...。 封装后的组件使我们不再需要关心平台的差异(Web/iOS/Android)。像上面提到的,HasteResolverPlugin 插件会帮助 webpack 做好代码的编译和打包工作。 Web 端的 pageX/pageY 获取与 React Native 有差异 Web 端初始化需要使用 runApplication Web 端请求数据需要考虑跨域 Web 端的组件没有 setNativeProps 方法 Web 端没有 LayoutAnimation React Web 基于 BSD 开源协议. React Web
演示
安装
npm install react-web --save
使用
第一步:项目中修改 webpack 配置
react-native
指向 react-web
,其次需要安装 haste-resolver-webpack-plugin
插件。// webpack.config.js var HasteResolverPlugin = require('haste-resolver-webpack-plugin'); module.exports = { resolve: { alias: { 'react-native': 'react-web' } }, plugins: [ new HasteResolverPlugin({ platform: 'web', nodeModules: ['react-web'] }) ] }
HasteResolverPlugin 的用处?
require('ReactActivityIndicator')
,如果目标是 Web 端,那么打包时就会引用 ActivityIndicator.web.js 这个文件。
@providesModule
信息并记录下来。ReactActivityIndicator
这种写法,而不会报错。@providesModule ReactActivityIndicator
的注释,没错就是给 HasteResolverPlugin 插件用的。 第二步:引入你需要的模块
第一种
var React = require('react-native'); var { AppRegistry, StyleSheet, View, Platform, } = React;
var styles = StyleSheet.create({ //your code });
var styles = React.StyleSheet.create({ //your code });
require('react-native')
,在 react-web 构建的时候也会被重命名,变成引用到 react-web 封装后的形式,相当于 require('ReactReact')
; 第二种
var AppRegistry = require('ReactAppRegistry'); var View = require('ReactView'); var Text = require('ReactText'); var Platform = require('ReactPlatform');
第三步:平台差异性
if (Platform.OS == 'web') { var touch = event.nativeEvent.changedTouches[0]; pageX = touch.pageX; pageY = touch.pageY; } else { startX = event.nativeEvent.pageX; startY = event.nativeEvent.pageY; }
AppRegistry.registerComponent('Game2048', () => Game2048); if(Platform.OS == 'web'){ var app = document.createElement('div'); document.body.appendChild(app); AppRegistry.runApplication('Game2048', { rootTag: app }) }
var fetch = Platform.OS === 'web'? require('ReactJsonp'): require('ReactFetch');
var setNativeProps = require('ReactSetNativeProps') setNativeProps(this.refs.foo, { style: { top: 0 } })
var LayoutAnimation = require('ReactLayoutAnimation') if(Platform.OS !== 'web'){ LayoutAnimation.configureNext(...) }
任务脚本
开源协议
来自: https://github.com/taobaofed/react-web/blob/master/README-zh.md