DEV Community

Ajetunmobi Isaac
Ajetunmobi Isaac

Posted on

How to Create Instagram Explore Grid Layout with React Native

Instagram Explore Grid

This tutorial will guide you on how to replicate Instagram Explore Grid layout in React Native application.

Introduction

Instagram Explore page exemplifies the complexities of grid layouts in mobile app design, it features an engaging mix of images and videos in varying sizes for an immersive user experience. In React Native, replicating this dynamic grid layout presents challenges, particularly when dealing with items of uneven sizes. react-native-flexible-grid simplifies this process and can effortlessly create responsive, captivating grid layouts. It addresses common issues related to item size variability, enabling developers to achieve an Instagram-like mosaic with minimal effort.

Setup

Ensure you have react-native-flexible-grid installed in your project:

npm install react-native-flexible-grid
Enter fullscreen mode Exit fullscreen mode

Or, if you prefer using Yarn:

yarn add react-native-flexible-grid
Enter fullscreen mode Exit fullscreen mode

Implementing the Instagram Explore Layout

Let's dive into the code required to create this layout. We'll start by preparing our data source and then move on to rendering the grid.

Data Preparation

First, define an array of objects representing the images you want to display. Each object can contain an imageUrl which will be used in renderItem for the image, and optionally, widthRatio and heightRatio to control the size of each item in the grid.

const data = [
  {
    imageUrl: 'https://picsum.photos/200/300?random=1',
  },
  {
    imageUrl: 'https://picsum.photos/200/300?random=2',
  },
  {
    imageUrl: 'https://picsum.photos/200/300?random=3',
    widthRatio: 1,
    heightRatio: 2,
  },
  // Add more items...
];
Enter fullscreen mode Exit fullscreen mode

Rendering the Grid

Using the ResponsiveGrid component from react-native-flexible-grid, you can easily render this data into a grid layout.
Here's a full example:

import * as React from 'react';
import { StyleSheet, View, Text, Image } from 'react-native';
import { ResponsiveGrid } from 'react-native-flexible-grid'; 

export default function InstagramExploreExample() {

const data = [
  {
    imageUrl: 'https://picsum.photos/200/300?random=1',
  },
  {
    imageUrl: 'https://picsum.photos/200/300?random=2',
  },
  {
    imageUrl: 'https://picsum.photos/200/300?random=3',
    widthRatio: 1,
    heightRatio: 2,
  },
];

  // Repeat data to fill the grid for demonstration
  const repeatedData = Array(5).fill(data).flat();

  const renderItem = (item, index) => (
    <View style={styles.boxContainer}>
      <Image
       source={{ uri: item.imageUrl }} 
       style={styles.box} resizeMode="cover" />
    </View>
  );
  return (
    <View style={{ flex: 1 }}>
      <ResponsiveGrid
        maxItemsPerColumn={3}
        data={repeatedData}
        renderItem={renderItem}
        style={{ padding: 5 }}
      />
    </View>
  );

const styles = StyleSheet.create({
  boxContainer: {
    flex: 1,
    margin: 1,
  },
  box: {
    width: '100%',
    height: '100%',
    backgroundColor: 'transparent',
  },
  });
}
Enter fullscreen mode Exit fullscreen mode

Grid Configuration

The ResponsiveGrid component configuration for creating an Instagram Explore-like layout is straightforward. The maxItemsPerColumn prop specifies the maximum number of items per column, ensuring a uniform appearance across different device sizes. The data prop feeds the grid with a list of items to display, while the renderItem function determines how each item is rendered. Lastly, the style prop allows for additional styling of the grid parent container, such as padding, to fine-tune its appearance on the screen.

Instagram Explore Example

Conclusion

With react-native-flexible-grid, creating a dynamic and responsive grid layout like the Instagram Explore page is straightforward. By adjusting the widthRatio and heightRatio for your items, you can achieve varied item sizes, contributing to an engaging and visually appealing layout

The full implementation of this Instagram Explore-like grid layout example file is available here.

Top comments (0)