国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > JavaScript > 正文

React-Native左右聯(lián)動List的示例代碼

2019-11-19 15:20:47
字體:
供稿:網(wǎng)友

一:左右聯(lián)動List,在工作中很常見。

今天分享一個同事寫的例子,本人只做了簡單修改。

注意:本例子必須修改源碼,參考本文第三條。

二:Coding

ParcelPage.js:

import React, { Component } from 'react';import {  AppRegistry,  StyleSheet,  Text,  View,  FlatList,  SectionList,  Dimensions,  TouchableOpacity,  Image,} from 'react-native';import ParcelData from './ParcelData.json'var { width, height } = Dimensions.get('window');let Headers = [];export default class ParcelPage extends Component {  static navigationOptions = ({ navigation }) => ({    headerTitle : '聯(lián)動List',  });  componentDidMount() {    ParcelData.map((item, i) => {      Headers.push(item.section);    });  };  componentWillUnmount() {    Headers = [];  };  renderLRow = (item) => {    return (      <TouchableOpacity style={[ styles.lItem, {backgroundColor: item.index == this.state.cell ? 'white' : null} ]}               onPress={()=>this.cellAction(item)}>        <Text style={styles.lText}>{ item.item.section }</Text>      </TouchableOpacity>    )  };  cellAction = (item) => {    if (item.index <= ParcelData.length) {      this.setState({        cell : item.index      });      if (item.index > 0) {        var count = 0;        for (var i = 0;          i < item.index;          i++) {          count += ParcelData[ i ].data.length + 1        }        this.refs.sectionList.scrollToIndex({ animated : false, index : count })      } else {        this.refs.sectionList.scrollToIndex({ animated : false, index : 0 });      }    }  };  itemChange = (info) => {    let section = info.viewableItems[ 0 ].section.section;    if (section) {      let index = Headers.indexOf(section);      if (index < 0) {        index = 0;      }      this.setState({ cell : index });    }  };  state = {    cell : 0  };  renderRRow = (item) => {    return (      <View style={ styles.rItem }>        <Image style={ styles.icon } source={{ uri : item.item.img }}/>        <View style={ styles.rItemDetail }>          <Text style={ styles.foodName }>{ item.item.name }</Text>          <View style={ styles.saleFavorite }>            <Text style={ styles.saleFavoriteText }>{ item.item.sale }</Text>            <Text style={ [styles.saleFavoriteText,{ marginLeft:15 }]}>{ item.item.favorite }</Text>          </View>          <Text style={ styles.moneyText }>¥{ item.item.money }</Text>        </View>      </View>    )  };  sectionComp = (section) => {    return (      <View style={{height:30,backgroundColor:'#DEDEDE',justifyContent:'center',alignItems:'center'}}>        <Text >{section.section.section}</Text>      </View>    )  };  separator = () => {    return (      <View style={{height:1,backgroundColor:'gray'}}/>    )  };  render() {    return (      <View style={ styles.container }>        <FlatList          ref='FlatList'          style={ styles.leftList }          data={ ParcelData }          renderItem={(item) => this.renderLRow(item)}          ItemSeparatorComponent={ () => this.separator() }          keyExtractor={ (item) => item.section }        />        <SectionList          ref='sectionList'          style={ styles.rightList }          renderSectionHeader={ (section) => this.sectionComp(section) }          renderItem={ (item) => this.renderRRow(item) }          sections={ ParcelData }          keyExtractor={ (item) => item.name }          onViewableItemsChanged={ (info) => this.itemChange(info) }        />      </View>    );  }}const styles = StyleSheet.create({  container : {    flexDirection : 'row'  },  leftList : {    width : 1 * width / 4,    backgroundColor : '#E9E9EF'  },  lItem : {    minHeight : 44,    justifyContent : 'center',  },  lText : {    marginLeft : 10,    marginRight : 10,    fontSize : 16,  },  rightList : {    width : 3 * width / 4  },  rItem : {    flexDirection : 'row'  },  rItemDetail : {    flex : 1,    marginTop : 10,    marginLeft : 5  },  icon : {    height : 60,    width : 60,    marginTop : 10,    marginBottom : 10,    marginLeft : 8,    borderWidth : 1,    borderColor : '#999999'  },  foodName : {    fontSize : 18,  },  saleFavorite : {    flexDirection : 'row',    marginTop : 5,    marginBottom : 5,  },  saleFavoriteText : {    fontSize : 13,  },  moneyText : {    color : 'orange'  },});

ParcelData.js

[ {  "section" : "熱銷",  "data" : [   {    "name" : "蟹黃湯包",    "sale" : "月售875",    "favorite" : "贊31",    "money" : "20",    "img":"http://p1.meituan.net/deal/__39230311__3449301.jpg"   },   {    "name" : "小餛飩",    "sale" : "月售875",    "favorite" : "贊31",    "money" : "10",    "img":"http://p1.meituan.net/deal/849d8b59a2d9cc5864d65784dfd6fdc6105232.jpg"   },   {    "name" : "蟹黃湯包+牛雜粉絲湯套餐",    "sale" : "月售875",    "favorite" : "贊31",    "money" : "35",    "img":"http://p0.meituan.net/deal/ed3025663342b126eaae24764704b017136487.jpg"   },   {    "name" : "鴨血粉絲湯",    "sale" : "月售875",    "favorite" : "贊31",    "money" : "15",    "img":"http://p0.meituan.net/deal/ed3025663342b126eaae24764704b017136487.jpg"   }  ] }, {  "section" : "介紹我們",  "data" : [   {    "name" : "慎用差評!任何問題聯(lián)系我們就可解決哦",    "sale" : "月售1",    "favorite" : "贊0",    "money" : "0",    "img":"http://p1.meituan.net/deal/__39230311__3449301.jpg"   }  ] }, {  "section" : "折扣套餐",  "data" : [   {    "name" : "特色蟹黃湯包+鴨血粉絲湯+果汁套餐",    "sale" : "月售875",    "favorite" : "贊31",    "money" : "50",    "img":"http://p1.meituan.net/deal/__39230311__3449301.jpg"   },   {    "name" : "蟹黃湯包+牛雜粉絲湯套餐",    "sale" : "月售875",    "favorite" : "贊31",    "money" : "35",    "img":"http://p1.meituan.net/deal/849d8b59a2d9cc5864d65784dfd6fdc6105232.jpg"   },   {    "name" : "蟹黃湯包+南瓜粥+果汁套餐",    "sale" : "月售875",    "favorite" : "贊31",    "money" : "10",    "img":"http://p0.meituan.net/deal/ed3025663342b126eaae24764704b017136487.jpg"   },   {    "name" : "金牌蟹黃湯包+紫米粥+檸檬果汁套餐",    "sale" : "月售875",    "favorite" : "贊31",    "money" : "10",    "img":"http://p0.meituan.net/deal/ed3025663342b126eaae24764704b017136487.jpg"   },   {    "name" : "臺式鹵肉飯+南瓜粥套餐",    "sale" : "月售875",    "favorite" : "贊31",    "money" : "10",    "img":"http://p0.meituan.net/deal/ed3025663342b126eaae24764704b017136487.jpg"   }  ] }, {  "section" : "純手工湯寶",  "data" : [   {    "name" : "金牌蟹黃湯包",    "sale" : "月售875",    "favorite" : "贊31",    "money" : "10",    "img":"http://p1.meituan.net/deal/__39230311__3449301.jpg"   },   {    "name" : "蟹庭豐特色蟹黃湯包",    "sale" : "月售875",    "favorite" : "贊31",    "money" : "10",    "img":"http://p1.meituan.net/deal/849d8b59a2d9cc5864d65784dfd6fdc6105232.jpg"   },   {    "name" : "蟹黃湯包",    "sale" : "月售875",    "favorite" : "贊31",    "money" : "10",    "img":"http://p0.meituan.net/deal/ed3025663342b126eaae24764704b017136487.jpg"   },   {    "name" : "干貝湯包",    "sale" : "月售875",    "favorite" : "贊31",    "money" : "10",    "img":"http://p0.meituan.net/deal/ed3025663342b126eaae24764704b017136487.jpg"   },   {    "name" : "鮑魚湯包",    "sale" : "月售875",    "favorite" : "贊31",    "money" : "10",    "img":"http://p0.meituan.net/deal/ed3025663342b126eaae24764704b017136487.jpg"   },   {    "name" : "全家福湯包",    "sale" : "月售875",    "favorite" : "贊31",    "money" : "10",    "img":"http://p0.meituan.net/deal/ed3025663342b126eaae24764704b017136487.jpg"   },   {    "name" : "蝦仁湯包",    "sale" : "月售875",    "favorite" : "贊31",    "money" : "10",    "img":"http://p0.meituan.net/deal/ed3025663342b126eaae24764704b017136487.jpg"   }  ] }, {  "section" : "湯、粥類",  "data" : [   {    "name" : "紫米粥",    "sale" : "月售875",    "favorite" : "贊31",    "money" : "10",    "img":"http://p1.meituan.net/deal/__39230311__3449301.jpg"   },   {    "name" : "金絲南瓜粥",    "sale" : "月售875",    "favorite" : "贊31",    "money" : "10",    "img":"http://p1.meituan.net/deal/849d8b59a2d9cc5864d65784dfd6fdc6105232.jpg"   },   {    "name" : "小米粥",    "sale" : "月售875",    "favorite" : "贊31",    "money" : "10",    "img":"http://p0.meituan.net/deal/ed3025663342b126eaae24764704b017136487.jpg"   },   {    "name" : "白粥",    "sale" : "月售875",    "favorite" : "贊31",    "money" : "10",    "img":"http://p0.meituan.net/deal/ed3025663342b126eaae24764704b017136487.jpg"   }  ] }, {  "section" : "面食類",  "data" : [   {    "name" : "雞湯面",    "sale" : "月售875",    "favorite" : "贊31",    "money" : "10",    "img":"http://p1.meituan.net/deal/__39230311__3449301.jpg"   },   {    "name" : "紅燒小排面",    "sale" : "月售875",    "favorite" : "贊31",    "money" : "10",    "img":"http://p1.meituan.net/deal/849d8b59a2d9cc5864d65784dfd6fdc6105232.jpg"   },   {    "name" : "紅燒牛肉面",    "sale" : "月售875",    "favorite" : "贊31",    "money" : "10",    "img":"http://p0.meituan.net/deal/ed3025663342b126eaae24764704b017136487.jpg"   }  ] }, {  "section" : "調(diào)味小菜",  "data" : [   {    "name" : "肉松",    "sale" : "月售875",    "favorite" : "贊31",    "money" : "10",    "img":"http://p1.meituan.net/deal/__39230311__3449301.jpg"   },   {    "name" : "辣椒包",    "sale" : "月售875",    "favorite" : "贊31",    "money" : "10",    "img":"http://p1.meituan.net/deal/849d8b59a2d9cc5864d65784dfd6fdc6105232.jpg"   },   {    "name" : "泡菜",    "sale" : "月售875",    "favorite" : "贊31",    "money" : "10",    "img":"http://p0.meituan.net/deal/ed3025663342b126eaae24764704b017136487.jpg"   },   {    "name" : "醬黃瓜",    "sale" : "月售875",    "favorite" : "贊31",    "money" : "10",    "img":"http://p0.meituan.net/deal/ed3025663342b126eaae24764704b017136487.jpg"   },   {    "name" : "蘿卜干",    "sale" : "月售875",    "favorite" : "贊31",    "money" : "10",    "img":"http://p0.meituan.net/deal/ed3025663342b126eaae24764704b017136487.jpg"   }  ] }, {  "section" : "飲料",  "data" : [   {    "name" : "可樂",    "sale" : "月售875",    "favorite" : "贊31",    "money" : "10",    "img":"http://p1.meituan.net/deal/__39230311__3449301.jpg"   },   {    "name" : "雪碧",    "sale" : "月售875",    "favorite" : "贊31",    "money" : "10",    "img":"http://p1.meituan.net/deal/849d8b59a2d9cc5864d65784dfd6fdc6105232.jpg"   },   {    "name" : "王老吉",    "sale" : "月售875",    "favorite" : "贊31",    "money" : "10",    "img":"http://p0.meituan.net/deal/ed3025663342b126eaae24764704b017136487.jpg"   },   {    "name" : "橙汁",    "sale" : "月售875",    "favorite" : "贊31",    "money" : "10",    "img":"http://p0.meituan.net/deal/ed3025663342b126eaae24764704b017136487.jpg"   }  ] }]

三:修改源碼

1-:SectionList

node_modules/react-native/Libraries/Lists/SectionList.js,代碼格式化后大概在187行的位置,修改如下 class SectionList<SectionT: SectionBase<any>>  extends React.PureComponent<DefaultProps, Props<SectionT>, void> {  props: Props<SectionT>;  static defaultProps: DefaultProps = defaultProps;  render() {    const List = this.props.legacyImplementation ? MetroListView : VirtualizedSectionList;    return <List      ref={this._captureRef}      {...this.props} />;  }  _captureRef = (ref) => {    this._listRef = ref;  };  scrollToIndex = (params: { animated?: ?boolean, index: number, viewPosition?: number }) => {    this._listRef.scrollToIndex(params);  }}

2-:VirtualizedSectionList

路徑在node_modules/react-native/Libraries/Lists/VirtualizedSectionList.js,大概253行處修改如下:

render() {    return <VirtualizedList      ref={this._captureRef}      {...this.state.childProps} />;  }  _captureRef = (ref) => {    this._listRef = ref;  };  scrollToIndex = (params: { animated?: ?boolean, index: number, viewPosition?: number }) => {    this._listRef.scrollToIndex(params);  }

四:

1-:代碼github地址:https://github.com/erhutime/React-Navigation-All

2-:下載完成后,修改index.ios.js:入口文件如下:

import App from './jscode/doubleList/App'AppRegistry.registerComponent('All', () => App);

五:效果圖如下:

以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持武林網(wǎng)。

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 临汾市| 绥芬河市| 蕲春县| 儋州市| 晋中市| 永新县| 辽阳县| 英德市| 福海县| 九江市| 象州县| 潜山县| 易门县| 宣城市| 日喀则市| 陵水| 中西区| 大邑县| 东源县| 略阳县| 叙永县| 莎车县| 双牌县| 武强县| 那坡县| 南汇区| 德阳市| 株洲县| 特克斯县| 虎林市| 夏邑县| 饶平县| 凤冈县| 大邑县| 栖霞市| 兴和县| 丁青县| 文安县| 潍坊市| 彭州市| 镇平县|