https://reactnative.cn/docs/getting-started.html
//连接夜神模拟器adb connect 127.0.0.1:62001
//启动项目react-native run-android
创建项目
npx react-native init AwesomeProject
ui框架
React Native Elements
基本语法
1-1 hello world
//要使用标签,第一步必须导入import React, { Component } from 'react';import { Text, View,Button} from 'react-native';export default class App extends Component {render() {return (<View><Text>Hello, world!</Text><Buttoncolor="#ff2d51"title="btn"/></View>);}}
1-2 Image
//网络图片<Image source={{uri:"xxx"}}>//Tips:图片相关的资源一定要夹样式width,height//本地图片<Image source={require('./assets/bg.jpg')}/>
1-3 样式
import React, { Component } from 'react';import { Text, View,StyleSheet} from 'react-native';export default class App extends Component {render() {return (<View style={styles.container}>//给多个style<Text style={[styles.txt,styles.bg]} >hello</Text></View>);}}const styles = StyleSheet.create({container:{backgroundColor:"red",width:200,height:200},txt:{color:"blue"},bg:{backgroundColor:"#fff"}})
1-4 Dimensions
import { Dimensions } from 'react-native';const { width, height,scale} =Dimensions.get('window');
1-5 布局
//react-native中默认view就是flex布局export default class App extends Component {render() {return (<View style={styles.container}><View style={styles.child}></View><View style={styles.child}></View><View style={styles.child}></View></View>);}}const styles = StyleSheet.create({container: {width:400,height:400,backgroundColor:"red",flexDirection:"row",justifyContent:"space-around",alignItems:"center"},child:{width:100,height:100,backgroundColor:"blue"}})
1-6 调试
1.夜神模拟器2.android studios3.真机调试
1-7 transform
transform:[{translate:[-50,-50]}]// transform:[{translateX:-50},{translateY:-50}]
事件
<Buttontitle="btn"onPress={()=>{Alert.alert("good")}}></Button>export default class App extends Component {render() {return (<View style={styles.container}><Buttontitle="btn"onPress={this.handleClick}></Button></View>);}handleClick=()=>{Alert.alert("good")}}
Http请求
componentDidMount() {// ctrl+shift+jvar url = "http://192.168.14.15:5000/dj/program?rid=336355127"fetch(url).then(res => res.json()).then(resJson => {console.log(resJson.programs)this.setState({movies: resJson.programs})})}//支持async awaitasync componentDidMount() {// ctrl+shift+jvar url = "http://192.168.14.15:5000/dj/program?rid=336355127"var data = await fetch(url);var resJson = await data.json();console.log(resJson)}
安装插件
react native Snippetrnc ----快速生成react-native
路由
1-1、配置
yarn add react-navigationyarn add react-navigation-stack
yarn add react-native-reanimated react-native-gesture-handler react-native-screens
//在android/app/build.gradle 中 dependencies 选项中添加下面这两行:implementation 'androidx.appcompat:appcompat:1.1.0-rc01'implementation 'androidx.swiperefreshlayout:swiperefreshlayout:1.1.0-alpha02'
在 src/main/java/com/native02/MainActivity.java 中加上package com.reactnavigation.example;import com.facebook.react.ReactActivity;+ import com.facebook.react.ReactActivityDelegate;+ import com.facebook.react.ReactRootView;+ import com.swmansion.gesturehandler.react.RNGestureHandlerEnabledRootView;public class MainActivity extends ReactActivity {@Overrideprotected String getMainComponentName() {return "Example";}+ @Override+ protected ReactActivityDelegate createReactActivityDelegate() {+ return new ReactActivityDelegate(this, getMainComponentName()) {+ @Override+ protected ReactRootView createRootView() {+ return new RNGestureHandlerEnabledRootView(MainActivity.this);+ }+ };+ }}
//index.jsimport 'react-native-gesture-handler'
1-2、拆分
routersviews
//routers/index.jsimport { createAppContainer } from 'react-navigation';import { createStackNavigator } from 'react-navigation-stack';import HomePage from '../views/HomePage';const AppNavigator = createStackNavigator({Home: {screen: HomePage},},{initialRouteName: "Home"});export default createAppContainer(AppNavigator);
//App.jsimport React from 'react';import AppNavigator from './routers'export default class App extends React.Component {render() {return <AppNavigator/>}}
1-3、配置导航条
1-3-1、在组件中配置
class HomeScreen extends React.Component {static navigationOptions = {title: 'Home',};}
1-3-2、在路由中配置
const AppNavigator = createStackNavigator({Home: {screen: HomePage,navigationOptions: {headerTitle: "网易",headerStyle: {backgroundColor: "#c20c0c"},headerTitleStyle: {color: "#fff"}}},});
1-3-3、导航条的全局配置
const AppNavigator = createStackNavigator(...{initialRouteName: "Home",//导航条的全局配置defaultNavigationOptions: {headerStyle: {backgroundColor: "#c20c0c"},headerTitleStyle: {color: "#fff"},headerTintColor:"#fff"}});
跳转
//配置Detail页面const AppNavigator = createStackNavigator({Home: {screen: HomePage,},Detail:{screen: DetailPage}});
//跳转<Buttontitle="Go to Details"onPress={() => this.props.navigation.navigate('Detail')}/>
<Buttontitle="Go to Details"onPress={this.toggleDetail}/>toggleDetail=()=>{this.props.navigation.navigate('Detail',{id:"86"})}
从Welcome到Home
export default class WelcomePage extends Component {...componentDidMount(){this.timer = setTimeout(()=>{this.props.navigation.navigate("Home")},3000)}componentWillUnmount(){if(this.timer){clearTimeout(this.timer)}}}
传值
//传递页面export default class HomePage extends Component {render() {return (<View><Text> HomePage </Text><Buttontitle="Go to Details"onPress={this.toggleDetail}/></View>);}toggleDetail=()=>{this.props.navigation.navigate('Detail',{id:"1001"})}}
//接收页面componentDidMount(){let id = this.props.navigation.getParam("id");Alert.alert(id)}
