RN

核心庫 :react-native-web
npm install --save react-native-web   (當(dāng)前集成的是0.14.3)
安裝babel及相關(guān) preset / plugin
npm install --save-dev @babel/core  (當(dāng)前集成的7.12.3)
npm install --save-dev @babel/runtime  (當(dāng)前集成的7.12.1)
npm install --save-dev @babel/preset-env  (當(dāng)前集成的7.12.1)
npm install --save-dev @babel/preset-react  (當(dāng)前集成的7.12.1)
npm install --save-dev @babel/preset-flow    (當(dāng)前集成的7.12.1)
安裝WebPack 與 WebPackSever 和及相關(guān)Loader
npm install --save-dev webpack   (當(dāng)前集成的4.31.0)
npm install --save-dev webpack-cli  (當(dāng)前集成的3.3.2)
npm install --save-dev webpack-dev-server   (當(dāng)前集成的3.3.1)
npm install --save-dev babel-loader  (當(dāng)前集成的8.1.0)
npm install --save-dev react-dom (當(dāng)前集成的17.0.0)
npm install --save-dev babel-plugin-transform-class-properties (當(dāng)前集成的6.24.1)

項目根目錄下找到 babel.config.js文件
module.exports = {
  presets: [
    'module:metro-react-native-babel-preset',
    [
      "@babel/preset-env", {
      "modules": "commonjs"
    }
    ],
    "@babel/preset-react",
    "@babel/preset-flow"
  ],

  plugins: [
    [
      "transform-class-properties"
    ]
  ]
  
};
項目根目錄 創(chuàng)建文件夾 index.html
<!DOCTYPE html>
<html lang="en" style="height:100%">
<head>
    <meta charset="UTF-8">
    <title>React Native Web In Superbuy App</title>
    <meta name="viewport" content="initial-scale=1.0,width=device-width">
    <style>
        html, body { height: 100%; width: 100%; overflow: hidden; }
        .react-app { height: 100%; overflow: hidden; }
    </style>
</head>
<body style="height:100%">
<div id="react-app" style="display:flex;height:100%">
</div>
<script src="./build/RN.web.js"></script>
</body>
</html>
項目根目錄 找到 index.js
import {AppRegistry,Platform} from 'react-native';
import App from './App';
import {name as appName} from './app.json';

AppRegistry.registerComponent(appName, () => App);
if(Platform.OS === 'web' ){
    AppRegistry.runApplication(appName, {
        initialProps: {},
        rootTag: document.getElementById('react-app')
    });
}
項目根目錄 找到 APP.js 注釋里面所有文件
import React, {
    Component
} from 'react';
import {
    StyleSheet,
    View,
    Text,
    FlatList,
    InteractionManager,
    Image,
} from 'react-native';

export default class App extends Component {
    
    constructor(props) {
        super(props)

        this.state = {
            dataSource: [],
        };
    }

    componentDidMount() {
        console.ignoredYellowBox = [
            'Warning: componentWillUpdate has been renamed',
            'Warning: componentWillMount has been renamed',
            'Warning: componentWillReceiveProps has been renamed',
            'Warning: codePush.SyncStatus'
            // 'Warning: isMounted(...) is deprecated',
        ]
        console.disableYellowBox = true

        let newArray = []
        for (let i = 0; i < 10; i++) {
            let dict = {title:"標(biāo)題",image:'https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1603344640367&di=1831eb733035d39e970b0a22110e3b1b&imgtype=0&src=http%3A%2F%2Fa0.att.hudong.com%2F70%2F91%2F01300000261284122542917592865.jpg'}
            newArray.push(dict)
        }

        InteractionManager.runAfterInteractions(() => {
            //執(zhí)行耗時的同步任務(wù)
            this.setState({dataSource: newArray});
        });

    }


    render() {
        return (
            <View style={{flex:1}}>
            <FlatList
                keyExtractor={(item, index) => item.key = index.toString()}
                ListHeaderComponent={this.renderHeader}
                renderItem={this.renderItem}
                ref={(flatList)=>this.flatList = flatList}
                data={this.state.dataSource}
                ItemSeparatorComponent={()=> {
                    return <View style={{height:10,width:'100%',backgroundColor:'lightgray'}}/>
                }}
            />
            </View>
        );
    }


    renderHeader =()=>{
        return (
            <View style={{paddingTop:44,height:100,backgroundColor:'red',justifyContent:'center',alignItems:'center'}}>
                <Text>頭部</Text>
            </View>
        )
    }


    renderItem =(item)=> {
      let rowData = item.item;
        let Index = rowData.key;
        return (  <View style={{
            backgroundColor: 'white',
            height: 100,
            justifyContent: 'space-between',
            paddingHorizontal: 10,
            flexDirection: 'row',
            alignItems:'center'
        }}>
            <Text>{rowData.title} {Index}</Text>
                <Image style={{height:70,width:70}} source={{uri:rowData.image}}/>
        </View>
        )
    }
};



const styles = StyleSheet.create({
    container: {
        flex: 1,
        justifyContent: 'center',
        alignItems: 'center',
        backgroundColor: '#F5FCFF',
    },
});


項目根目錄 創(chuàng)建文件夾 webpack.config.js
const path = require('path');

module.exports = {
  entry: './index.js',
  output: {
    filename: 'RN.web.js',
    path: path.resolve(__dirname, 'build'),
  },
  mode: 'development',
  module: {
    rules: [
      {
        test: /\.js$/,
        exclude: /(node_modules|bower_components)/,
        use: {
          loader: 'babel-loader',
          // options: {
          //    presets: ['@babel/preset-env']
          // }
        }
      }
    ]
  },

  resolve: {
    alias: {
      'react-native$': 'react-native-web'
    }
  },

  devServer: {
    contentBase: path.join(__dirname, ""), //本地服務(wù)器所加載的頁面所在的目錄
    historyApiFallback: true,//不跳轉(zhuǎn)
    host:'0.0.0.0',
    port:7000,
    inline: true,//實時刷新
    hot:true,//Enable webpack's Hot Module Replacement feature
    compress:true,//Enable gzip compression for everything served
    overlay: true, //Shows a full-screen overlay in the browser
    stats: "errors-only" ,//To show only errors in your bundle
    open:true, //When open is enabled, the dev server will open the browser.
    proxy: {
      "/api": {
        target: "http://localhost:3000",
        pathRewrite: {"^/api" : ""}
      }
    }
  }
}

項目根目錄 找到 package.json
  • 增加打包命令(開發(fā))
  • 增加打包命令(生產(chǎn))
  • 增加打開服務(wù)器命令
scripts": {
    "dev": "webpack --mode development",
    "build": "webpack --mode production",
    "server": "webpack-dev-server"
  },
當(dāng)前項目根目錄 打開終端輸入 一下指令
npm run dev
npm run server
WeChat5aa5314f7942908d0e2309d9c033707d.png
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末擅编,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌拖陆,老刑警劉巖锡搜,帶你破解...
    沈念sama閱讀 218,941評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異署驻,居然都是意外死亡奋献,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,397評論 3 395
  • 文/潘曉璐 我一進(jìn)店門硕舆,熙熙樓的掌柜王于貴愁眉苦臉地迎上來秽荞,“玉大人,你說我怎么就攤上這事抚官⊙锇希” “怎么了?”我有些...
    開封第一講書人閱讀 165,345評論 0 356
  • 文/不壞的土叔 我叫張陵凌节,是天一觀的道長钦听。 經(jīng)常有香客問我,道長倍奢,這世上最難降的妖魔是什么朴上? 我笑而不...
    開封第一講書人閱讀 58,851評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮卒煞,結(jié)果婚禮上痪宰,老公的妹妹穿的比我還像新娘。我一直安慰自己畔裕,他們只是感情好衣撬,可當(dāng)我...
    茶點故事閱讀 67,868評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著扮饶,像睡著了一般具练。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上甜无,一...
    開封第一講書人閱讀 51,688評論 1 305
  • 那天扛点,我揣著相機(jī)與錄音,去河邊找鬼岂丘。 笑死陵究,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的奥帘。 我是一名探鬼主播畔乙,決...
    沈念sama閱讀 40,414評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼翩概!你這毒婦竟也來了牲距?” 一聲冷哼從身側(cè)響起返咱,我...
    開封第一講書人閱讀 39,319評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎牍鞠,沒想到半個月后咖摹,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,775評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡难述,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,945評論 3 336
  • 正文 我和宋清朗相戀三年萤晴,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片胁后。...
    茶點故事閱讀 40,096評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡店读,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出攀芯,到底是詐尸還是另有隱情屯断,我是刑警寧澤,帶...
    沈念sama閱讀 35,789評論 5 346
  • 正文 年R本政府宣布侣诺,位于F島的核電站殖演,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏年鸳。R本人自食惡果不足惜趴久,卻給世界環(huán)境...
    茶點故事閱讀 41,437評論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望搔确。 院中可真熱鬧彼棍,春花似錦、人聲如沸膳算。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,993評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽畦幢。三九已至,卻和暖如春缆蝉,著一層夾襖步出監(jiān)牢的瞬間宇葱,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,107評論 1 271
  • 我被黑心中介騙來泰國打工刊头, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留黍瞧,地道東北人。 一個月前我還...
    沈念sama閱讀 48,308評論 3 372
  • 正文 我出身青樓原杂,卻偏偏與公主長得像印颤,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子穿肄,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,037評論 2 355