⒈初始化 React Native环境

  参考https://reactnative.cn/docs/getting-started.html

⒉安装React Native官方的脚手架工具

npm install -g @react-native-community/cli

⒊使用React Native脚手架初始化项目

#默认是JavaScript
npx react-native init ts_react_native
#可以直接使用TypeScript初始化
npx react-native init ts_react_native --template react-native-template-typescript

⒋安装watchman

  watchman用于监控React Native项目中文件的变动,经常有开发者忘记安装watchman而导致项目无法启动的情况

cd ts_react_native
y watchman

⒌更改项目为TypeScript环境

  1.将TypeScript以及React Native和Jest的类型添加到您的项目中。

yarn add typescript @types/jest @types/react @types/react-native @types/react-test-renderer
# or for npm
npm install --save-dev @types/jest @types/react @types/react-native @types/react-test-renderer

  ⒉在项目的根目录中创建TypeScript配置文件tsconfig.json:

{
"compilerOptions": {
"allowJs": true,
"allowSyntheticDefaultImports": true,
"esModuleInterop": true,
"isolatedModules": true,
"jsx": "react",
"lib": ["es6"],
"moduleResolution": "node",
"noEmit": true,
"strict": true,
"target": "esnext"
},
"exclude": [
"node_modules",
"babel.config.js",
"metro.config.js",
"jest.config.js"
]
}

  3.创建一个jest.config.js文件来配置Jest以使用TypeScript

module.exports = {
preset: 'react-native',
moduleFileExtensions: ['ts', 'tsx', 'js', 'jsx', 'json', 'node'],
};

  4.重命名一个JavaScript文件为 *.tsx

  5.运行yarn tsc以检查新的TypeScript文件。

  6.启动项目

#启动ios
cd ts_react_native && npx react-native run-ios
#启动Android
cd ts_react_native && npx react-native run-android

⒍设计架构

  React Native的项目架构如图所示

  这与React App的常规架构几乎一摸一样,只是使用React Navigation作为路由库。

  我们必须充分利用代码复用的优势。在React Native中,我们同样需要使用Redux对状态进行全局管理。这样的结构是为了React生态能够简单地移植。

⒎React Navigation 

  React Navigation是React Native上的一个路由解决方案,它在进行设计的时候,很多函数都是以高阶函数的方式实现的,所以使用时会有很多不太直观的地方。

yarn add react-navigation @types/react-navigation

  将之前的index.tsx改名为List.tsx,因为后面需要实现列表页,然后再新建一个index.tsx

  

import React from 'react';
import {StackNavigator} from 'react-navigation';
import List from './List'; const StackRouter = StackNavigator({
List:{
screen:List
}
},{
initialRouteName: 'List',
}) const Router = () => (<StackRouter />) expect default Router

  路由就算集成完毕了。

⒏Redux

  添加依赖后,修改相关代码。1.需要移除react-router相关代码,2要修改在开发环境下连接Redux开发工具的函数。

src/store/index.ts
import {applyMiddleware, combineReducers, createStore} from 'redux';
import {composeWithDevTools} from 'redux-devtools-extension';
import {persistReducer,persistStore,PersistConfig} from 'redux-persist';
import storage from 'redux-persist/es/storage';
import thunk from 'redux-thunk';
import reducers from '../reducer'; const middleware = [thunk]; const rootReducer = combineReducers({
...reducers,
}) const persistConfig: PersistConfig = {
key: 'root',
storage,
whitelist: ['draft'],
} const persistedReducer: typeof rootReducer = persistedReducer(PersistConfig,rootReducer); const store = createStore(
persistedReducer,
__DEV__? composeWithDevTools(applyMiddleware(...middleware)) : applyMiddleware(...middleware),
) const persistor = persistStore(store); export{
store,
persistor,
}
src/index.tsx
import React from 'react';
import {StackNavigator} from 'react-navigation';
import List from './List';
import {Provider} from 'react-redux';
import {PersistGate} from 'redux-persist/integration/react';
import {persistor,store} from './store'; const StackRouter = StackNavigator({
List:{
screen:List
}
},{
initialRouteName: 'List',
}) const Router = () => (
<Provider store={store}>
<PersistGate loading={null} persistor={persistor}>
<StackRouter />
</PersistGate>
</Provider>
) expect default Router

  这样,我们就能最大限度地复用React App中的代码了。

  *可以使用react-native-debugger进行调试

⒐列表页

  实现列表页需要连接Redux然后获取数据,这里我们先用Text组件来循环渲染

  这个地方需要注意,要全局修改网路请求的地址到localhost:3001,因为App上没有跨域的限制,可以直接访问。

  所以我们先发一波网络请求。

src/List.tsx
import React, { Component } from 'react';
import {Platform,StyleSheet,Text,View,TouchableOpacity} from 'react-native';
import {fetchList} from './action';
import {connect} from 'react-redux'; const mapStateToProps = (storeState,IStoreState) => ({
list: storeState.list,
}) type IStateProps = ReturnType<typeof mapStateToProps> const mapDispatchToProps = {
fetchList,
} type IDispatchProps = typeof mapDispatchToProps type IProps = IStateProps & IDispatchProps class App extends Component<IProps> {
componentDidMount(){
this.props.fetchList()
} render(){
console.log(this.props.list)
return(
<View style={styles.container}> </View>
)
}
} export default connect<IStateProps,IDispatchProps>(mapStateToProps,mapDispatchToProps)(App) const styles = StyleSheet.create({
container:{
flex:1,
justifyContent:"center",
alignItems:"center",
backgroundColor:'#F5FCFF',
},v
});

  在Debugger工具中你可以看到Action的变化,但不能看到网络请求。

  有个小技巧,在Dubugger中点击右键,选择Enable Network Inspect就可以在Network Tab页下查看网络请求了。

  到这里,你会发现所有的东西又回到了熟悉的React环境中。

⒑总结

  如果你熟悉React,那么就已经入门React Native一半了。

  如果了解在React下使用TypeScript,那么在React Native中使用React全家桶更是轻而易举。

  如果在React Native的开发中没有使用TypeScript,在没有严格类型检查的情况下,在React Native中,空值或者异常值会直接导致Native运行环境的奔溃,代码的质量把关比起Web环境要严苛了许多,这也是React Native项目最后必然都引入类型检查工具的原因。

  建议大家在创建React Native项目时,优先使用TypeSctipt,这可以避免很多由脏数据产生难以发觉的bug。

使用TypeScript创建React Native的更多相关文章

  1. 利用 Create React Native App 快速创建 React Native 应用

    本文介绍的 Create-React-Native-App 是非常 Awesome 的工具,而其背后的 Expo 整个平台也让笔者感觉非常的不错.笔者目前公司是采用 APICloud 进行移动应用开发 ...

  2. React Native Android原生模块开发实战|教程|心得|怎样创建React Native Android原生模块

    尊重版权,未经授权不得转载 本文出自:贾鹏辉的技术博客(http://blog.csdn.net/fengyuzhengfan/article/details/54691503) 告诉大家一个好消息. ...

  3. 利用 Create React Native App 创建 React Native 应用

    $ npm i -g create-react-native-app $ create-react-native-app my-project $ cd my-project $ npm start

  4. React Native创建一个APP

    React Native 结合了 Web 应用和 Native 应用的优势,可以使用 JavaScript 来开发 iOS 和 Android 原生应用.在 JavaScript 中用 React 抽 ...

  5. React Native环境配置、初始化项目、打包安装到手机,以及开发小知识

    1.前言 环境:Win10 + Android 已经在Windows电脑上安装好 Node(v14+).Git.Yarn. JDK(v11) javac -version javac 11.0.15. ...

  6. windows 7下React Native环境配置

    React Native 是 Facebook 推出的一个用 Java 语言就能同时编写 ios,android,以及后台的一项技术,它可以做到实时热更新 .FaceBook 也号称这们技术是 “Le ...

  7. 深入浅出React Native 2: 我的第一个应用

    这是深入浅出React Native教程的第二篇文章. 1. 环境配置 React Native环境配好之后,就可以开始创建我们的第一个App啦. 打开控制台,输入 react-native init ...

  8. React Native的环境搭建以及开发的IDE

    (一)前言 前面的课程我们已经对React Native的环境搭建以及开发的IDE做了相关的讲解,今天我们的主要讲解的是应用设备运行(Running)以及调试方法(Debugging).本节的前提条件 ...

  9. 深入浅出 React Native:使用 JavaScript 构建原生应用

    深入浅出 React Native:使用 JavaScript 构建原生应用 链接:https://zhuanlan.zhihu.com/p/19996445 原文:Introducing React ...

随机推荐

  1. HTTP请求响应的过程

    1. TCP/IP协议分层结构 应用层(含括了OSI七层中的上三层,分别为应用层,表示层, 会话层):DNS,  URI,  HTML,  HTTP,  TLS/SSL,  SMTP,   POP,  ...

  2. 美团Android自动化之旅—适配渠道包

    http://tech.meituan.com/mt-apk-adaptation.html 概述 前一篇文章(美团Android自动化之旅-生成渠道包)介绍了Android中几种生成渠道包的方式,基 ...

  3. Python将多张图片进行合并拼接

    import PIL.Image as Image import os IMAGES_PATH = r'D:\pics22223\\' # 图片集地址 IMAGES_FORMAT = ['.jpg', ...

  4. CMU Database Systems - Query Processing

    Query Model Query处理有三种方式, 首先是Iterator model,这是最基本的model,又称为volcano,pipeline模式 他是top-down的模式,通过next函数 ...

  5. 【转】自动化框架中引入ExtentReport美化报告

    本文链接:https://blog.csdn.net/qq_30353203/article/details/82023922一.先引入三个依赖包 <dependency> <gro ...

  6. PrivateIpAddresses Array of String 实例主网卡的内网IP列表。 PublicIpAddresses Array of String 实例主网卡的公网IP列表。 注意:此字段可能返回 null,表示取不到有效值。

    https://cloud.tencent.com/document/api/213/15753 浮动 IP 地址 https://cloud.google.com/solutions/best-pr ...

  7. java类型 jdbcType类型 mysql类型关系

    java类型 jdbcType类型 mysql类型关系 Java类型 JdbcType Mysql类型 备注 String VARCHAR VARCHAR 变长字符串 String LONGVARCH ...

  8. vscode 常用设置与插件推荐

    1.Chinese (Simplified) Language Pack for Visual Studio Code 适用于 VS Code 的中文(简体)语言包 2.Color Info Visu ...

  9. 使用 Ninja 代替 make

    使用 Ninja 代替 make 摘自:https://www.jianshu.com/p/d118615c1943 22017.01.14 11:41:44字数 1408阅读 26336 前言 在传 ...

  10. Linux记录-批量安装软件服务(转载)

    #!/bin/bash # 安装函数 install(){    for soft in $*    do         echo "$soft"安装中...         y ...