美文网首页
Rect-Native 主要城市选择组件

Rect-Native 主要城市选择组件

作者: 小黑Swift | 来源:发表于2016-08-11 14:01 被阅读295次

    基于ListView组件

    Simulator Screen Shot 2016年8月11日 下午2.00.38.png
        import React, { Component } from 'react';
        import {
          AppRegistry,
          StyleSheet,
          Text,
          View,
          Image,
          ListView,
          TouchableOpacity, // 不透明度触摸
          AlertIOS
        } from 'react-native';
    
        // 导入json数据
        var City = require('./City.json');
        //导入外部的XX
        var Dimensions = require('Dimensions');
        var screenWidth = Dimensions.get('window').width;
    
    
        // 一些常量设置
        var cols = 3;
        var cellWH = 100;
        var vMargin = (screenWidth - cellWH * cols) / (cols + 1);
        var hMargin = 25;
    
        // ES5
        var ViewController = React.createClass({
          // 设置默认值,固定值()
          getDefaultProps(){
              return{
    
              }
          },
    
          // 初始化函数
          getInitialState(){
    
             var  getSectionData = (dataBlob, sectionID) => {
                 return dataBlob[sectionID];
             };
    
             var  getRowData = (dataBlob, sectionID, rowID) => {
                 return dataBlob[sectionID + ':' + rowID];
             };
    
              return{
                  dataSource: new ListView.DataSource({
                      getSectionData: getSectionData, // 获取组中数据
                      getRowData: getRowData, // 获取行中的数据
                      rowHasChanged: (r1, r2) => r1 !== r2,
                      sectionHeaderHasChanged:(s1, s2) => s1 !== s2
                  })
              }
    
          },
    
          render(){
              return(
                  <ListView
    
                  />
              );
          },
    
          // 复杂的操作:数据请求 或者 异步操作(定时器)
          componentDidMount(){
              // 调用json数据
              this.loadDataFromJson();
          },
    
    
          loadDataFromJson(){
             // 拿到json数据
             var jsonCityData = City
             // 定义一些变量
              var jsonKey = [], //装所有key值的数组
                  dataBlob = {},
                  sectionIDs = [],
                  rowIDs = [];
            //取出json的key值 并排列
            for (var key in jsonCityData) {
               jsonKey.push(key);
            }
              jsonKey.sort() //数组排序abcdef...
             //遍历
              for(var i=0; i<jsonKey.length; i++){
                  // 1. 把组号放入sectionIDs数组中
                  sectionIDs.push(i);
    
                  // 2.把组中内容放入dataBlob对象中
                  allKey = jsonKey[i]
                  dataBlob[i] = allKey
    
                  // 3. 取出该组中所有的城市
                  citys = jsonCityData[allKey];
                  rowIDs[i] = [];
    
                  // 4. 遍历所有的城市数组
                  for(var j=0; j<citys.length; j++){
                      // 把行号放入rowIDs
                      rowIDs[i].push(j);
                      // 把每一行中的内容放入dataBlob对象中
                      dataBlob[i+':'+j] = citys[j];
                  }
              }
    
              // 更新状态
              this.setState({
                  dataSource: this.state.dataSource.cloneWithRowsAndSections(dataBlob,sectionIDs,rowIDs)
              });
    
          },
    
           render(){
              return(
                  <View style={styles.outerViewStyle}>
                      {/*头部*/}
                      <View style={styles.headerViewStyle}>
                          <Text style={{color:'white', fontSize:18, marginTop:18,}}>城市选择</Text>
                      </View>
                      {/*ListView*/}
                      <ListView
                          style={styles.listViewStyle}
                          dataSource={this.state.dataSource}
                          renderRow={this.renderRow}
                          renderSectionHeader={this.renderSectionHeader}
                      />
                  </View>
              );
           },
    
           // 每一行的数据
           renderRow(rowData){
    
               return(
    
                   <TouchableOpacity activeOpacity={0.5} onPress={()=>{AlertIOS.alert("😄")}}>
                       <View style={styles.rowStyle}>
    
                          <Text style={{marginLeft:5}}>{rowData.name}</Text>
                       </View>
                   </TouchableOpacity>
               );
           },
    
           // 每一组中的数据
           renderSectionHeader(sectionData, sectionID){
               return(
                   <View style={styles.sectionHeaderViewStyle}>
                      <Text style={{marginLeft:5, color:'#12A8F6'}}>{sectionData}</Text>
                   </View>
               );
           }
        });
    
        const styles = StyleSheet.create({
          outerViewStyle:{
            //占满窗口
             flex:1,
          },
    
    
          headerViewStyle:{
              height:64,
              backgroundColor:'#12A8F6',
    
              justifyContent:'center',
              alignItems:'center'
          },
    
          listViewStyle: {
            // 改变主轴的方向
          //flexDirection:'row',
            // 多行显示
            //flexWrap:'wrap'
          },
    
          //cell row的风格
          rowStyle:{
            // 设置主轴的方向
            height: 44,
            flexDirection:'row',
            // 侧轴方向居中
            alignItems:'center',
            padding:10,
    
            borderBottomColor:'#e8e8e8',
            borderBottomWidth:0.5
          },
    
    
          sectionHeaderViewStyle:{
              backgroundColor:'#ECECEC',
              height:25,
              padding:5,
              justifyContent:'center'
          }
        });
    
        AppRegistry.registerComponent('ViewController', () => ViewController);
    

    相关文章

      网友评论

          本文标题:Rect-Native 主要城市选择组件

          本文链接:https://www.haomeiwen.com/subject/zyqssttx.html