欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

React Native学习笔记

程序员文章站 2022-05-30 23:40:42
...

,最近刚开始学习RN,用这个做下笔记。


引用组件首字母必须要大写,不然就会造成错误 Expected a component class,got[object Object]。


react-native-vector-icons用法
下载:
npm install react-native-vector-icons –save
react-native link react-native-vector-icons

代码里使用
import Icon from ‘react-native-vector-icons/XXX’;

<Icon name={'md-home'}size={30}color={selected ? '#3e9ce9' : '#000000'}/>

react-native-tab-navigator的使用
下载:npm install react-native-tab-navigator –save

简单的一个demo,使用react-native-vector-icons中的图标,需要注意的是每个Item必须要返回一个视图,不然会报错。

import React, {Component} from 'react';

import {
    StyleSheet,
    Text,
    View,
    Image
} from 'react-native';
//导入react-native-tab-navigator方式:
//cmd项目路径下执行npm install react-native-tab-navigator --save
import TabNavigator from 'react-native-tab-navigator'
import Icon from 'react-native-vector-icons/FontAwesome'
export default class Tabbar extends Component {
    constructor(props) {
        super(props);
        this.state = {
            selectedTab: 'Home'
        }
    }

    render() {
        return (
            <View style={styles.container}>
                <TabNavigator>
                    <TabNavigator.Item
                        //设置选中的位置
                        selected={this.state.selectedTab === 'Home'}
                        //标题
                        title="首页"
                        //标题样式
                        titleStyle={styles.tabText}
                        //选中时标题文字样式
                        selectedTitleStyle={styles.selectedTabText}
                        //图标
                        renderIcon={() => <Icon name={'home'} size={30} color={this.state.selectedTab === 'Home' ? '#3e9ce9' : '#000000'} />}
                        //选中时图标
                        renderSelectedIcon={() => <Icon name={'home'} size={30} color={this.state.selectedTab === 'Home' ? '#3e9ce9' : '#000000'} />}
                        //点击Event
                        onPress={() => this.setState({ selectedTab: 'Home' })}>
                        <View style={styles.page0}>
                            <Text style={{fontSize:18,padding:15,color: 'blue'}}>This is Home Page</Text>
                        </View>
                    </TabNavigator.Item>
                    <TabNavigator.Item
                        selected={this.state.selectedTab === 'List'}
                        title="订单"
                        titleStyle={styles.tabText}
                        selectedTitleStyle={styles.selectedTabText}
                        renderIcon={() => <Icon name={'list'} size={25} color={this.state.selectedTab === 'List' ? '#3e9ce9' : '#000000'} />}
                        renderSelectedIcon={() =>  <Icon name={'list'} size={25} color={this.state.selectedTab === 'List' ? '#3e9ce9' : '#000000'} />}
                        onPress={() => this.setState({ selectedTab: 'List' })}>
                        <View style={styles.page0}>
                            <Text style={{fontSize:18,padding:15,color: 'blue'}}>This is List Page</Text>
                        </View>
                    </TabNavigator.Item>
                    <TabNavigator.Item
                        selected={this.state.selectedTab === 'Friend'}
                        title="朋友"
                        titleStyle={styles.tabText}
                        selectedTitleStyle={styles.selectedTabText}
                        renderIcon={() => <Icon name={'address-book'} size={25} color={this.state.selectedTab === 'Friend' ? '#3e9ce9' : '#000000'} />}
                        renderSelectedIcon={() => <Icon name={'address-book'} size={25} color={this.state.selectedTab === 'Friend' ? '#3e9ce9' : '#000000'} />}
                        onPress={() => this.setState({ selectedTab: 'Friend' })}>
                        <View style={styles.page1}>
                            <Text style={{fontSize:18,padding:15,color: '#fff'}}>This is Friend Page</Text>
                        </View>
                    </TabNavigator.Item>
                    <TabNavigator.Item
                        selected={this.state.selectedTab === 'User'}
                        title="我的"
                        titleStyle={styles.tabText}
                        selectedTitleStyle={styles.selectedTabText}
                        renderIcon={() => <Icon name={'user'} size={27} color={this.state.selectedTab === 'User' ? '#3e9ce9' : '#000000'} />}
                        renderSelectedIcon={() => <Icon name={'user'} size={27} color={this.state.selectedTab === 'User' ? '#3e9ce9' : '#000000'} />}
                        onPress={() => this.setState({ selectedTab: 'User' })}>
                        <View style={styles.page1}>
                            <Text style={{fontSize:18,padding:15,color: '#fff'}}>This is User Page</Text>
                        </View>
                    </TabNavigator.Item>
                </TabNavigator>
            </View>
        );
    }
}

const styles = StyleSheet.create({
    container: {
        flex: 1
    },
    tabText: {
        fontSize: 10,
        color: '#000000'
    },
    selectedTabText: {
        fontSize: 10,
        color: '#3e9ce9'
    },
    icon: {
        width: 22,
        height: 22
    },
    page0: {
        flex: 1,
        backgroundColor: 'yellow'
    },
    page1: {
        flex: 1,
        backgroundColor: 'blue'
    }
});

react-native-viewpager(图片轮播)的使用
安装:npm install react-native-viewpager –save

使用看Github上的示例:https://github.com/race604/react-native-viewpager

这里遇到两个问题,具体见下图:
React Native学习笔记

第一个是当设置图片显示在页面上方指定高度时,页面滚动指示器的位置不会自动显示在图片下方,而是在页面的最下方。第二个问题是选中的小圆点和没选中的小圆点不在一个水平线上,解决方法是修改react-native-viewpager的源码,具体代码如下:
第一个问题修改ViewPager.js文件,修改过后的代码如下:
React Native学习笔记

第二个问题修改DefaultViewPageIndicator.js文件

curDot: {
    position: 'absolute',
    width: DOT_SIZE,
    height: DOT_SIZE,
    borderRadius: DOT_SIZE / 2,
    backgroundColor: '#80ACD0',
    margin: DOT_SAPCE,
    bottom: -4,//原来的值是0
  },

最后上效果图:
React Native学习笔记

相关标签: react-native