1. 程式人生 > >基於React Native構建的仿京東客戶端(四)

基於React Native構建的仿京東客戶端(四)

實現產品列表卡檢視必須新增2個檔案ListItem.js和ProductList.js,請注意蘋果手機React-Native預設是不支援https協議的:

ListItem.js檔案完整的程式碼如下:

import React,{Component} from 'React';
import {
TouchableWithoutFeedback,
Image,
Animated,
View,
Text
} from 'react-native';

export default class ListItem extends Component {


	render() {
		const { id, itemWidth, image, wname, jdPrice, onPressItem } = this.props
		//console.log(onPressItem)
		return (
			<TouchableWithoutFeedback style={{flex:1,alignItems:'center'}} onPress = {() => onPressItem(id)}>
				<View style = {{marginTop: 2, marginBottom: 2, paddingRight: 4, }}>
					<Image style={{ width: itemWidth, height: 200 }} source={image} />
					<Text numberOfLines={4}
                        style={{
                            width: itemWidth,
                            flexWrap: 'wrap',
                            fontSize: 12,
                            color: 'black',
                            flex: 1,
                            paddingLeft: 5,
                            paddingRight: 5,
                            height: 65,
                            backgroundColor: 'white'
                        }}
                    >{wname}</Text>
                    <View style={{flexDirection:'row',justifyContent: 'space-around',paddingRight: 10,backgroundColor: 'white',paddingBottom: 5}}>
                        <Text
                            style={{
                                flex: 1,
                                alignSelf: 'flex-start',
                                textAlign: 'left',
                                paddingLeft: 5,
                                fontSize: 13,
                                color: '#f15353'
                            }}
                        >¥{jdPrice}</Text>
                        <TouchableWithoutFeedback>
                            <View
                                style={{
                                    width:50,
                                    height:20,
                                    backgroundColor: 'pink',
                                    borderRadius:30,
                                    justifyContent: 'center',
                                    alignItems: 'center',
                                }}
                            >
                                <Text style={{color:'#f15353',fontSize:12,textAlign:'center'}}>看相似</Text>
                            </View>
                        </TouchableWithoutFeedback>
                    </View>
				</View>
			</TouchableWithoutFeedback>
		);
	}
}

ProductList.js檔案完整的程式碼如下:

import React,{Component} from 'React';
import {
StyleSheet,
FlatList,
View,
Dimensions
} from 'react-native';
import ListItem from './ListItem';
const SCREEN_WIDTH = Dimensions.get('window').width;

export default class ProductList extends Component {
    state = {
        columns: 2,
        key: 1,
        array: [],
    }

    constructor(props) {
        super(props)
        this.getProducts = this.getProducts.bind(this)
    }

    getProducts() {
        //JSON.stringify() 方法是將一個JavaScript值(物件或者陣列)轉換為一個 JSON字串
        //JSON.parse() 方法用於將一個 JSON 字串轉換為物件
        fetch('http://m.jd.com/index/recommend.action?_format_=json&page=1',{
            method: 'GET'
        }).then((response)=> {
            return response.json()
        }).then((respnoseJson) => {
            return JSON.parse(respnoseJson.recommend)
        }).then((recommend) => {
            // console.log(recommend.wareInfoList)
            let newArray = this.state.array.slice()
            let concatArray = newArray.concat(recommend.wareInfoList)
            this.setState({
                array: concatArray
            })
        }).catch((error) => {
            console.warn(error);
        }).done();
    }

    componentDidMount(){
        this.getProducts()
    }

    onPressingItem(wareId) {
        //console.log(wareId)
        let url = 'http://item.m.jd.com/product/' + wareId + '.html';
        this.props.nav.push({
            id: 'webview',
            title: 'webview',
            url: url
        });
    }

    render() {
        const { columns, key, array } = this.state
        return (
            <View style = {styles.container}>
                <FlatList
                    key = {key}
                    numColumns = {columns}
                    data = {array}
                    renderItem = {({ item, index }) => {
                        return <ListItem
                            id = {item.wareId}
                            itemWidth = {SCREEN_WIDTH / columns - 2 }
                            image = {{ uri: item.imageurl }}
                            wname = { item.wname }
                            jdPrice = { item.jdPrice }
                            onPressItem = {this.onPressingItem}
                            />
                    }}
                    keyExtractor = {
                        (item, index) => { return  item.wareId }
                    }
                />
             </View>
        );
    }
}

const styles = StyleSheet.create({
    container: {
        flex: 1,
        backgroundColor: '#EEE9E9',
        justifyContent: 'space-around',
        flexDirection:'row',
    },
})

安卓和蘋果模擬器中執行的效果截圖如下:


相關推薦

基於React Native構建仿京東客戶

實現產品列表卡檢視必須新增2個檔案ListItem.js和ProductList.js,請注意蘋果手機React-Native預設是不支援https協議的:ListItem.js檔案完整的程式碼如下:import React,{Component} from 'React';

基於React Native構建仿京東客戶

ImageButton.js檔案完整的程式碼如下:import React, { Component } from 'react';import {  StyleSheet,  Text,  View,  Image,  TouchableWithoutFeedback,}

基於React Native構建仿京東客戶如何實現首頁 分類 發現 購物車 我的 Tab導航頁面

新建4個用紅色方框標識的檔案,如下圖所示:myths-Mac:JdApp myth$ yarn add react-native-tab-navigatorCartPage.js檔案完整的程式碼如下:import React, { Component } from 'reac

從0開始寫一個基於Flutter的開源中國客戶4——Flutter佈局基礎

我的上一篇部落格中記錄了Flutter基礎和一些常用的Widgets,這一篇中主要記錄Flutter常用的一些佈局,希望自己在記錄的同時能溫故知新,同時給初學者一些幫助。 Flutter佈局容器 在Android開發中,我們使用xml檔案寫佈局,有諸

通過Openlayers中getGetFeatureInfoUrl方法請求WMS服務資料到客戶Browser基於Geoserver伺服器

本文基於tomcat伺服器進行網站開發,geoserver管理GIS資料服務,在tomcat伺服器中訪問geoserver時出現跨域訪問被拒絕的杯具,遂本文要有理有據的闡述一下如何解決這個跨域訪問geoserver中的GIS資料並以JSON資料格式返回到前端。 首先,

從0開始寫一個基於Flutter的開源中國客戶8——外掛的使用

上一篇中我記錄了基於Flutter的開源中國客戶端裡網路請求和資料儲存的部分,本篇記錄的是app中外掛的使用,由於很多功能並沒有內建到Flutter中,所以我們需要引入一些外掛來幫助我們完成某些功能,比如app內網頁的載入,相簿選擇照片等。 搜尋外掛包

從0開始寫一個基於Flutter的開源中國客戶5——App整體佈局框架搭建

上一篇中我記錄了Flutter中常用的一些佈局,本篇開始開發基於Flutter的開源中國客戶端了。在本篇部落格中,要實現的是一個App的整體框架,包括頁面底部的Tab導航選單、頁面的側滑選單以及跳轉到新的頁面這幾個功能。希望自己在記錄的同時能溫故知新,同時

從0開始寫一個基於Flutter的開源中國客戶6——各個靜態頁面的實現

上一篇中我記錄了基於Flutter的開源中國客戶端的整體佈局框架的搭建,本篇記錄的是每個頁面的靜態實現,關於具體的資料載入和儲存,放在下一篇中記錄,希望自己在溫故知新的同時,能給Flutter初學者一些幫助。 在基於Flutter的開源中國客戶端中,使

MFC基於Socket建立伺服器客戶TCP

MFC Socket網路通訊程式設計 最近因為一個專案需要進行區域網絡通訊,向工作單位的軟體工程師請教了一下需要用到哪些知識,然後博主就自學了一遍windows網路通訊程式設計原理,然後就在網上找了一大堆例子,但實際執行效果並不佳,花了大概一週多的時間總

手把手教你仿一個知乎日報Android客戶多圖

本文為作者原創,轉載請註明出處@大蘑菇的部落格 圖片託管服務由貼相簿提供 作為一隻網蟲,肯定是經常泡在網路的海洋裡,有一天偶然看到了知乎日報的API,各方面介面都還挺全面,於是本著“不用白不用”的真理,我決定仿一個知乎日報Adnroid客戶端。

手把手教你仿一個知乎日報Android客戶主頁面設計

各位朋友,從本篇文章和開始,手把手教你仿一個Android客戶端就要正式開始探究怎樣實現我們前面的那些需求了。在此開發我們將會使用git作為版本控制工具,並且將程式碼託管到github,好啦,廢話少說,咱們開工。 一、建立專案 怎麼建立專案大家應該都知道

基於TCP的伺服器/客戶---------網路程式設計Linux----C

基於TCP的伺服器端/客戶端(二)---網路程式設計(Linux--C) 在基於TCP的伺服器端/客戶端(一)中的回聲客戶端存在的問題: 下列是echo_client.c中的程式碼: write(so

Redis連接的客戶connected_clients數過高或者不減的問題解決方案

http lib last 知識庫 nbsp reac nts 關閉連接 comm 最近的項目上使用ServiceStack.Redis上了redis緩存,其中遇到了很多問題。。 比如說 某一天發現redis做的緩存竟然失效了,然後查了下日誌 報錯max number o

Redis學習筆記--Redis客戶

本機 -c trace 圖形 tro cli family 毫秒 ati 1.Redis客戶端 1.1 Redis自帶的客戶端   (1)啟動   啟動客戶端命令:[root@kwredis bin]# ./redis-cli -h 127.0.0.1 -p 6379

zabbix系列之使用ansible批量部署zabbix客戶

zabbix_agent ansible 批量部署客戶端 ansible ansible是新出現的自動化運維工具,基於Python開發,集合了眾多運維工具(puppet、cfengine、chef、func、fabric)的優點,實現了批量系統配置、批量程序部署、批量運行命令等功能。

PostgreSQL增強版命令行客戶pgcli

sta alt postgres 圖片 href 分享圖片 lan https TP 效果: 安裝: https://www.pgcli.com/install 官網: https://www.pgcli.com/ PostgreSQL增強版命令行客戶端(pg

使用SVN客戶Windows

rto pro logs tortoise win .cn blog .html 服務端 SVN服務端環境參考:https://www.cnblogs.com/pzk7788/p/9446424.html這裏我使用一臺雲服務器(139.xxx.xxx.89)作為SVN服務端

記一次邊鋒客戶C++實習生面試

第一篇部落格,也是第一次寫部落格,就記一次準備的不是很充分的面試吧。 總體來說應該不算難,還是挺簡單的。 到那邊後先填一張資訊表,然後hr會過來讓你做一套試卷,選擇題和簡答題。大概包括引用、運算子過載、模板類的靜態變數、建構函式等相關,選擇題比較基礎。簡答題包括lambd

新榜微信文章抓取客戶APSpider

原始碼下載請至 https://github.com/inmyjs/apspider 這是以前給新媒體運營同事寫的爬蟲軟體,用了一段時間就沒用了(唉、氣死我了)。 目前只抓取了新榜的日榜(周榜、月榜類似,換下地址即可)下,各行業的前50個公眾號下的7天熱門文章和最新發布

以太坊go-ethereum客戶兩種全節點啟動模式

這篇部落格介紹一下go-ethereum全節點的兩種啟動模式:主網路快速啟動和測試網路快速啟動。這也是客戶端所提供的兩種啟動方式,直接拿來使用即可。下面具體介紹一下使用方法。 主網路快速啟動 其實,我們大多數人再使用節點的時候並不關係之前的歷史資料。我們啟動