NearBy

ちょっぴり役に立つ情報を発信しているブログです。

ReactNativeでPullToRefresh

はじめに

今回は、ReactNativeでPullToRefreshを実装する方法について書きます。

FlatListを用います。FlatListの記事についてはこちらの記事で書きました。

www.near-by.design

実装

コードは前回と同様のコードを使います。 f:id:zawank0:20180411085910p:plain refreshingonRefresh というpropsを追加しています。

class FeedSample extends Component {
  constructor(props) {
    super(props);
    this.renderFeedList = this.renderFeedItem.bind(this);
    this.onFeedPress = this.onFeedPress.bind(this);
  }
  componentWillMount() {
    this.props.fetchFeeds(); 
  }
  onFeedPress(url) {
    Actions.Webview({ url });
  }
  renderFeedItem({ item }) {
    return (
      <FeedItem
        item={item}
        onPress={() => this.onFeedPress(item.link)}  
      />
    );
  }
  render() {
    return (
       <View style={styles.container}>
        <FlatList
          data={this.props.feeds}
          renderItem={this.renderFeedItem}
          keyExtractor={item => item.id}
          refreshing={false} // Added.
          onRefresh={() => this.props.fetchFeeds()} // Added.
        />

        />
      </View>
    );
  }
}

onRefresh propsを追加して関数を渡すようにします。

今回は、this.props.fetchFeeds をわたして、Pullした時に最新の情報をAPIから取得するようにしています。

onRefresh を追加した時は、refreshing propsも必ず渡す必要があります。

trueにすると、Indicatorが表示されるようになりますが、最初に表示させる必要はないので、falseにしています。

終わりに

シンプルにPullToRefreshの処理がかけたかと思います。 AndroidでもiOSでも動きます!

今回は以上ですー。

ザワンコのプロフィール

簡単な自己紹介

23歳のザワンコといいます。

開発会社で働きつつ、フリーランスで仕事をしています。

下記のようなことを楽しんでやっています。

- 開発案件
- アフィリエイト
- WEBマーケティング
- 個人サービス

プログラミングと漫画とお酒と野球とお友達を愛しています。

作ったもの

😐更新中😇

仕事

😐更新中😇

今後やりたいこと

将来的には、個人のスキルを周りに還元したり、

社会に対してインパクトのあるサービスを仲間と作っていきたいです。

もっと将来的には、暖かい場所で仲間とビール飲んでいたいです。

S3を使って簡単独自ドメインWEBサイト公開方法

はじめに

WEBサイトを公開したいときは、どうしていますか?

サーバーを借りて、ドメイン当てて...

今回は簡単に自分のWEBサイトをS3とRoute53を利用して公開する方法について書きます。

非エンジニアの方でも大丈夫!

S3でWEBサイトを公開する

Route53でドメイン取得

まずは、独自のドメインを取得しちゃいましょう。

AWSのconsoleからRoute53のページに飛んで好きなドメインを取得します。(有料) AWS マネジメントコンソール | AWS

f:id:zawank0:20180404080935p:plain

取得したら、今回のWEBサイトを公開するURLを決めておきましょう。

下記が例です。(ポートフォリオを公開する想定)

portfolio.mydomain

バケットを作る

次は、S3でバケットを作成します。

同じくAWS ConsoleのS3のページに行き、上で決めたURL(portfolio.mydomain)のバケットを作成します。

作成 f:id:zawank0:20180404081405p:plain

バケット名は、先ほど決めたもの f:id:zawank0:20180404081359p:plain

あとは基本的に、デフォルトの設定で進めて大丈夫です。

ファイルをアップロード

作成したら、ファイル群をアップロードします。

バケットでアップロード

ローカルのファイルをそのまま持ってきてしまいましょう。 f:id:zawank0:20180404081556p:plain

公開

次に、公開するために作成したバケットのプロパティで、static website hostingを有効化します。 f:id:zawank0:20180404081839p:plain

そしてアクセス権限のパケットポリシーを下記のように更新します。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "AddPerm",
            "Effect": "Allow",
            "Principal": "*",
            "Action": "s3:GetObject",
            "Resource": "arn:aws:s3:::それぞれのバケットネーム(portfolio.mydomain)*"
        }
    ]
}

最後に独自ドメインを当てるためにRoute53のページに戻り、先ほど取得したドメインを選択し、Create Record Set を押して、Nameにportfolio とし、 Alias をyesにすると、AliasTargetに先ほど作成したS3が表示されると思います。

これで、数分待てばportfolio.mydomain でwebサイトが公開できます。

まとめ

簡単に独自ドメイン取得から、公開までできました。

FlatListの基本的な使い方

はじめに

アプリ開発においてListViewのようなUIは必須だと思います。

今回はReactNativeで実現する方法について書きます。

FlatListとは

FlatListは、バージョン0.43から新しいComponentとして追加されています。

以前までは、ListViewというCompomentが主に使われていました。

FlatListは、ListViewで問題だったパフォーマンス面が改善されているので こちらを使った方が良いです。

実装

今回は、Feed Containerのようなものを作ってみます。

componentWillMount()APIからデータをFetchしてレスポンスをFlatListに渡すような想定です。

class FeedSample extends Component {
  constructor(props) {
    super(props);
    this.renderFeedList = this.renderFeedItem.bind(this);
    this.onFeedPress = this.onFeedPress.bind(this);
  }
  componentWillMount() {
    this.props.fetchFeeds(); // 1. Fetch
  }
  onFeedPress(url) {
    Actions.Webview({ url }); // cellタップ時にwebviewで表示するような実装(今回は触れません)
  }
  renderFeedItem({ item }) {
    return (
      <FeedItem
        item={item}
        onPress={() => this.onFeedPress(item.link)}  
      />
    );
  }
  render() {
    return (
       <View style={styles.container}>
         // 2. FlatListにデータを入れる
        <FlatList
          data={this.props.feeds}
          renderItem={this.renderFeedItem}
          keyExtractor={item => item.id}
        />
      </View>
    );
  }
}

1: APIからデータをFetchしてくる箇所です。Fetchしたデータは、this.props.feedsに入ります。

2: 実際にFlatListにデータを入れる箇所です。

dataにデータを入れて、不要なRerenderを防ぐためにkeyExtractorにユニークな値を入れます。

renderItemには、constructorでbindしているrenderFeedItemを入れて 各cellのviewはそっちで定義するようにしています。

cellのUIは変えましたが、こんな感じのUIになりました。

f:id:zawank0:20180403092952p:plain

まとめ

基本的なFlatListの使い方について説明しました。

pull to refresh 等も実装できるので、また次回書きます。

-> 書きましたー。

www.near-by.design

RGBではなくカラーコードでUIColorを定義するextension

はじめに

RGBで独自のUIColorを定義するのはよくあることかと思います。

extension UIColor {
    
    class var appGreen: UIColor {
        return UIColor(red: 96.0 / 255.0, green: 216.0 / 255.0, blue: 124.0 / 255.0, alpha: 1.0)
    }
    
    class var appGray: UIColor {
        return UIColor(red: 172.0 / 255.0, green: 172.0 / 255.0, blue: 186.0 / 255.0, alpha: 1.0)
    }

    // 続く...
}

今回は、カラーコードで定義するextensionについて書きます。

extension

下記のような感じで定義できます。

extension UIColor {

    static let hogeColor = UIColor(hex: 0xEDEAEA)
    static let fugaColor = UIColor(hex: 0xD0CDD0)
    
    convenience init(red: Int, green: Int, blue: Int, a: CGFloat = 1.0) {
        self.init(
            red: CGFloat(red) / 255.0,
            green: CGFloat(green) / 255.0,
            blue: CGFloat(blue) / 255.0,
            alpha: a
        )
    }
    
    convenience init(hex: Int, a: CGFloat = 1.0) {
        self.init(
            red: (hex >> 16) & 0xFF,
            green: (hex >> 8) & 0xFF,
            blue: hex & 0xFF,
            a: a
        )
    }
}

Macで画面のカラーコードを取得する

はじめに

いろんなサービスのデザインを参考にして、個人でも取り込もうと思った時にカラーコードを知りたいなーと思う時があるかと思います。 そんな時は、Macにデフォルトで入っている DigitalColor Meterを使うのがおすすめです。

DigitalColor Meterとは

f:id:zawank0:20180321174030p:plain

Mac OSXに標準でインストールされているカラーピッカーです。 Macを持っていれば使えます。

使い方

起動

まずは起動です。

画面を選択

下記画像のように、画面を選択するとその色が表示されます。

f:id:zawank0:20180321174624p:plain

表示形式を変える

デフォルトのままで使うと10進数で表示されるので少しわかりづらいです。 #FFFのように16進数で使いたいですね。 その場合は、表示 -> 値を表示 -> 16進 と変更すれば、16進数で表示することができます。 画像の場合は、真っ白で#FFFFFF ですね!

f:id:zawank0:20180321174817p:plain

終わりに

画面の色を知りたい時には便利ですので、ぜひ使ってみると良いかもです!