程序员React Native开发经验集React Native开发技巧

React Native05 - 组件Image和九宫格效果

2017-04-05  本文已影响768人  涅磐广广

前言

之前有人问我学习一门技术,怎么样才能最快速的掌握一门技术,我的回答是写博客或者给别人讲解。

这两种方式有一个共性,那就是都需要专研。我们自己去学习的时候,容易有一种得过且过的心理,比如:“算了,不研究了,我知道怎么写就行”。但当你写博客或者讲解的时候,就不能有这样的心态了,你得专研他到底是什么原理,这样你在写博客或者给别人讲解的过程中,你才会更加自信。同时你自己也再一步一步的提升。

废话不多说了,本篇内容如下:

一、组件Image

当你在android和iOS项目中增加图片后,仅仅reload, 图片是无法显示的,你必须要重新安装这个软件

二、九宫格案例

九宫格效果图
  1. 将source文件夹中的BadgeData.json文件放到跟index.android.js同级的目录里

  2. 将source中的图片放到android的drawable文件夹和iOS的asset文件夹, 点击创建drawable文件夹,iOS的自行百度

  3. 在index.android.js的同级目录下新建一个js文件,统一取名为index.main.js

  1. 具体代码

    index.main.js

      import React, { Component } from 'react';
      import {
          AppRegistry, 
          StyleSheet,  
          Text,        
          View,         
          Image
      } from 'react-native';
    
      /*设置一些全局变量*/
    
      //获取设备的宽
      var dimensions = require("Dimensions");
      var width = dimensions.get("window").width;
    
      //设置每行3列
      var cols = 3;
    
      //每个小View的宽
      var boxW = 100;
    
      //计算每个View的间距
      var vMargin = (width-cols*boxW)/(cols+1);
    
      /*引入json数据
    
         A: 这里将json文件给引入了,我怎么去看变量badgeData里面的内容到底是什么呢?
    
         Q:   1. 直接console.log()
              2. andorid手机摇一摇手机,点击Debug JS Remotely,此时会在PC端自动给给打开一个网站(http://localhost:8081/debugger-ui),点开控制台即可看到你输出的内容,在这里会将json文件的内容转化成对象输出到控制台
    
      */
       var badgeDate = require("./BadgeData.json");
       console.log(badgeDate); 
    
      var MyRn = React.createClass({
    
            render() {
    
                 return (
    
                      //这个View是全屏的View,具体样式看container
                      <View style={styles.container}>
    
                           /*函数renderAllBadge返回一个数组,该数组里放着每一个小View
    
                            * 提醒:
                            * 
                            *  1. 目前我们是在组件对象MyRn中的render()函数里,renderAllBadge是组件对象MyRn里面的一个函数
                            *
                            *  2. this指代的就是当前组件对象,这里跟js里面函数的用法一致
                            *
                            */
                           {this.rederAllBadge()}
                      </View>
    
                 );
           },
    
          rederAllBadge(){
    
             //这个数组里存放我们准备好的每个小View,最终要作为这个函数的返回值返回
           var allData = [];
    
             //通过for循环来取出来每个小View的数据
           for(var i=0;i<badgeDate.data.length;i++){
    
              var badge = badgeDate.data[i];
    
                      //每次循环以后,将准备好的View放到数组allData中
                   allData.push(
                          //通过key来标识每一个小View
                          <View key={i} style={styles.outViewStyle}>            
                              <Image source={{uri:badge.icon}}  style={styles.imageStyle}/>
                              <Text style={styles.textStyle}>{badge.title}</Text>
                          </View>       
                   );       
                }
    
                 //将allData作为返回值返回
               return allData;
    
             }
        })
    
      const styles = StyleSheet.create({
    
          container: {
    
              flex: 1,
              backgroundColor: 'white',
    
              flexDirection:"row",
              flexWrap:"wrap",
           },
    
          outViewStyle:{
    
              backgroundColor:"gray",
    
              alignItems:"center",
    
              width:boxW,
              height:boxW,
              marginLeft:vMargin,
              marginTop:vMargin
    
          },
    
          imageStyle:{
    
          width:80,
          height:80
          },
    
          textStyle:{
          fontSize:15
          }  
      });
    
      //导出自定义的组件
      module.exports = MyRn;
    
     index.android.js
    
      import {
          AppRegistry, 
    
      } from 'react-native';
    
      //导入其他文件中的组件
      var MyView =  require("./index.main.js");
    
      AppRegistry.registerComponent('myRn', () => MyView);
    
上一篇下一篇

猜你喜欢

热点阅读