iT邦幫忙

2017 iT 邦幫忙鐵人賽
DAY 20
0
Modern Web

React Native 航向真全端,建構雙平台 App系列 第 20

React Native App 實戰 (三) 首頁 - 廣告 Banner

  • 分享至 

  • xImage
  •  

通常一款 電商 App 開起來,最上方會有一個 Banner 輪播漂漂亮亮的圖片來吸引使用者,今天我們就來實作和設計一款簡單好用的 Banner 吧,當然輪播的部分我們不用重新動手刻,我們使用別人寫好的套件來用,react-native-swiper他是一款方便好用的輪播套件,提供很多擴充功能而且也支援 Android,所以我們簡單的把它封裝起來,變成我們的首頁輪播 Component 吧,當然這個 Component 並不用控制任何東西,也沒有自己的狀態,所以我們把它寫成 dump Component, pure function 的形式,需要傳入一個 prop data,這樣之後我們的廣告就能用 api 的形式載入。

因為 Banner.js 太長的緣故,我直接推到 GitHub

const defaultProps = {
  data: [],
};

const propTypes = {
  data: PropTypes.array
};

我們可以看到這個部分是在定義我們的 prop 預設值跟資料型別的,如果資料型別錯誤他會噴 YellowBox 來提醒使用者,我們的 data 預計要放輪播的資訊,像是圖片、文字、文字顏色、文字位置的,所以我們 data 定義成這樣

[{
  img: { uri: 'https://d2lm6fxwu08ot6.cloudfront.net/img-thumbs/960w/6T4KJZ8W9M.jpg' },
  text: 'Clothing',
  textPosition: 'bottomLeft',
  textColor: '#FFF'
}]

知道傳入的格式之後我們就來顯示吧

const Banner = (props) => (
  <Swiper style={styles.wrapper} height={250} horizontal autoplay>
    {
      props.data.map((data, i) => (
        <Image key={`ad${i}`} style={[styles.slide, styles[data.textPosition]]} source={data.img}>
          <Text style={[styles.text, { color: data.textColor || '#fff' }]}>{data.text}</Text>
        </Image>
      ))
    }
  </Swiper>
);

這個部分就是主要我們的廣告 Banner 的 render 邏輯,這邊用了一個小技巧直接在裡面用 map 回傳裡面的 childe Component,然後再用 {data.text} 的形式把值取出來。

然後 style 的部分,我們的文字顯示位置有使用 React Natvie FlexBox 的排版 該章節交到的小技巧來排版文字
這裡擷取一小段來說明

bottomRight: {
  padding: 30,
  justifyContent: 'flex-end',
  alignItems: 'flex-end',
},

justifyContent、alignItems 都使用 flex-end 這樣子我們的文字就會排版到右下角摟。
最後我們 Banner 使用方法就像這樣

import Banner from '../components/Banner'
<Banner data={[{
  img: { uri: 'https://d2lm6fxwu08ot6.cloudfront.net/img-thumbs/960w/6T4KJZ8W9M.jpg' },
  text: 'Clothing',
  textPosition: 'bottomLeft',
}, {
  img: { uri: 'https://d2lm6fxwu08ot6.cloudfront.net/img-thumbs/960w/OERP9XI9YB.jpg' },
  text: 'Gentleman',
}, {
  img: { uri: 'https://d2lm6fxwu08ot6.cloudfront.net/img-thumbs/960w/1U68PK9DJ0.jpg' },
  text: 'Shoes & Bags',
  textPosition: 'topLeft',
}]} />

完成效果


有問題歡迎來 React Native Taiwan 問喔
創科資訊


上一篇
React Native App 實戰 (二) 87% 像 Spotify 登入頁面
下一篇
React Native App 實戰 (四) 首頁 - 卡片元件
系列文
React Native 航向真全端,建構雙平台 App30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言