创建
npx react-native init native01
目录结构
image.png我们只在App.js进行编码 //启动项目 react-native run-android
ui框架

React Native Elements

一、基本语法

1.hello world

  1. import React, { Component } from 'react';
  2. import {Text,View,Button} from 'react-native' //要使用标签,第一步必须导入
  3. class App extends Component {
  4. render() {
  5. return (
  6. <View style={{flex:1,justifyContent:"center",alignItems:"center"}}>
  7. <Text>hello world</Text>
  8. <Button title="登录"
  9. color="#ff2d51"></Button>
  10. </View>
  11. );
  12. }
  13. }
  14. export default App;

2.图片

网络图片
先引入import {Image} from ‘react-native’

  1. <Image style={{width:100,height:100}} source={{uri:"xxx"}}/> //图片相关的资源一定要加样式宽和高

本地图片

  1. <Image style={{width:200,height:200}} source={require('./assets/1.jpg')}/>

3.文字

  1. <View>
  2. <Text>我爱鹿晗</Text> //文字必须包含在Text标签里
  3. </View>

4.state属性

  1. class App extends Component {
  2. state={
  3. msg:"hello world"
  4. }
  5. render() {
  6. return (
  7. <View>
  8. <Text>{this.state.msg}</Text>
  9. </View>
  10. );
  11. }
  12. }

5.样式

  1. import {StyleSheet} from 'react-native' //先导入
  2. class App extends Component {
  3. render() {
  4. return (
  5. <View style={styles.container}>
  6. <Text style={styles.txt,styles.bg}>Hello world</Text> //多样式
  7. </View>
  8. );
  9. }
  10. }
  11. const styles = StyleSheet.create({
  12. container:{
  13. backgroundColor:"red",
  14. width:200,
  15. height:200
  16. },
  17. txt:{
  18. color:"blue"
  19. },
  20. bg:{
  21. backgroundColor:"#fff"
  22. }
  23. })
  1. //transform:[{translateX:-50},{translateY:-50}],
  2. transform:[{translate:[-50,-50]}]

6.Dimensions

获取屏幕高度,宽度,缩放

  1. import React, { Component } from 'react';
  2. import {Dimensions} from 'react-native' //引入
  3. const {width,height,scale} =Dimensions.get('window')
  4. class App extends Component {
  5. render() {
  6. return (
  7. <View>
  8. <Text>{width}</Text>
  9. <Text>{height}</Text>
  10. <Text>{scale}</Text>
  11. </View>
  12. );
  13. }
  14. }
  15. export default App;

7.布局

默认View是flex布局

  1. class App extends Component {
  2. render() {
  3. return (
  4. <View style={styles.container}>
  5. <View style={styles.child}></View>
  6. <View style={styles.child}></View>
  7. <View style={styles.child}></View>
  8. </View>
  9. );
  10. }
  11. }
  12. const styles = StyleSheet.create({
  13. container:{
  14. backgroundColor:"red",
  15. flexDirection:"row", //列
  16. justifyContent:"space-around", //水平居中
  17. alignItems:"center" //垂直居中
  18. },
  19. child:{
  20. width:100,
  21. height:100,
  22. backgroundColor:"blue"
  23. }
  24. })

定位

  1. class App extends Component {
  2. render() {
  3. return (
  4. <View style={styles.container}>
  5. <View style={styles.child}></View>
  6. </View>
  7. );
  8. }
  9. }
  10. const styles = StyleSheet.create({
  11. container:{
  12. width:420,
  13. height:400,
  14. backgroundColor:"red",
  15. position:"relative",
  16. backgroundColor:"red"
  17. },
  18. child:{
  19. width:100,
  20. height:100,
  21. backgroundColor:"blue",
  22. position:"absolute",
  23. left:30,
  24. top:30
  25. }
  26. })

8.TextInput

  1. import {TextInput} from 'react-native' //引入
  2. class App extends Component {
  3. render() {
  4. return (
  5. <View>
  6. <TextInput style={styles.input}/>
  7. </View>
  8. );
  9. }
  10. }
  11. const styles = StyleSheet.create({
  12. input:{
  13. borderColor:"#333",
  14. borderWidth:2
  15. }
  16. })

9.事件

  1. import {Text,View,Button,Alert} from 'react-native'
  2. class App extends Component {
  3. render() {
  4. return (
  5. <View style={styles.container}>
  6. <Button title="事件" onPress={()=>{
  7. Alert.alert("good")
  8. }}></Button>
  9. </View>
  10. );
  11. }
  12. }

Touchable 系列组件

这个组件的样式是固定的。所以如果它的外观并不怎么搭配你的设计,那就需要使用TouchableOpacity或是TouchableNativeFeedback组件来定制自己所需要的按钮,视频教程如何制作一个按钮讲述了完整的过程。或者你也可以在 github.com 网站上搜索 ‘react native button’ 来看看社区其他人的作品。
具体使用哪种组件,取决于你希望给用户什么样的视觉反馈:

  • 一般来说,你可以使用TouchableHighlight来制作按钮或者链接。注意此组件的背景会在用户手指按下时变暗。
  • 在 Android 上还可以使用TouchableNativeFeedback,它会在用户手指按下时形成类似墨水涟漪的视觉效果。
  • TouchableOpacity会在用户手指按下时降低按钮的透明度,而不会改变背景的颜色。
  • 如果你想在处理点击事件的同时不显示任何视觉反馈,则需要使用TouchableWithoutFeedback

某些场景中你可能需要检测用户是否进行了长按操作。可以在上面列出的任意组件中使用onLongPress属性来实现

10.FlatList

纵向列表

  1. import {Text,View,FlatList} from 'react-native' //引入
  2. class App extends Component {
  3. state={
  4. arr:["html","css","javascript"]
  5. }
  6. render() {
  7. return (
  8. <View>
  9. <FlatList
  10. data={this.state.arr}
  11. renderItem={({item})=> <Text key={item}>{item}</Text>}></FlatList>
  12. </View>
  13. );
  14. }
  15. }

11.SectionList

官网粘贴复制

12.Http请求

  1. componentDidMount() {
  2. // ctrl+shift+j
  3. var url = "http://192.168.14.15:5000/dj/program?rid=336355127"
  4. fetch(url).then(res => res.json()).then(resJson => {
  5. console.log(resJson.programs)
  6. this.setState({
  7. movies: resJson.programs
  8. })
  9. })
  10. }
  11. //支持async await
  12. async componentDidMount() {
  13. // ctrl+shift+j
  14. var url = "http://192.168.14.15:5000/dj/program?rid=336355127"
  15. var data = await fetch(url);
  16. var resJson = await data.json();
  17. console.log(resJson)
  18. }

实例

  1. import React, { Component } from 'react';
  2. import {Text,View,StyleSheet,FlatList,Image} from 'react-native'
  3. class App extends Component {
  4. state={
  5. movies:[]
  6. }
  7. render() {
  8. return (
  9. <View style={styles.container}>
  10. <FlatList
  11. data={this.state.movies}
  12. renderItem={({item})=> <View>
  13. <Text>{item.name}</Text>
  14. <Image style={styles.img} source={{uri:item.coverImgUrl}}/>
  15. </View>}></FlatList>
  16. </View>
  17. );
  18. }
  19. componentDidMount(){
  20. var url ="http://192.168.14.15:5000/top/playlist";
  21. fetch(url).then(res=>res.json()).then(resJson=>{
  22. this.setState({
  23. movies:resJson.playlists
  24. })
  25. })
  26. }
  27. }
  28. const styles = StyleSheet.create({
  29. container: {
  30. flex: 1,
  31. paddingTop: 22
  32. },
  33. img:{
  34. width:100,
  35. height:100
  36. }
  37. })
  38. export default App;