Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Bring Advance Grid layout & CSS Grid like features to React native #395

Open
6 tasks done
iNerdStack opened this issue Aug 3, 2024 · 0 comments
Open
6 tasks done

Comments

@iNerdStack
Copy link

The Problem

React Native primarily relies on Flexbox for layouts. While Flexbox is powerful, it falls short when creating complex grid-based layouts, handling unevenly arranged items dynamically that are easily achievable with CSS Grid in web development. Developers often have to write complex, custom layout logic & algorithms to achieve advanced grid-like arrangements, leading to increased development time and potential bugs.

The Solution

I started a react native module to address these issues by:

  1. Bringing CSS Grid-like Capabilities: By implementing a custom algorithm using absolute positioning, it simulates many of the powerful features of CSS Grid within the constraints of React Native.

  2. Optimizing Performance: Through virtualization and efficient rendering techniques, the grid system can handle large datasets without compromising performance.

  3. Enhancing Responsiveness: The grid components are designed to be inherently responsive, adapting to different screen sizes and orientations with minimal additional code.

  4. Simplifying Complex Layouts: By providing intuitive APIs similar to those used in popular web frameworks, we make it easier for developers to create complex grid layouts without writing extensive custom logic.

  5. Bridging the Gap: This project aims to bring the layout capabilities of web development closer to React Native, allowing developers to create more sophisticated and visually appealing user interfaces in their mobile applications. It would empower developers to create more complex, performant, and responsive layouts in their React Native applications, ultimately leading to better user experiences and more efficient development processes.

Project description

The core idea behind this project is to utilize absolute positioning and a custom algorithm to manage arrangement, effectively simulating CSS Grid-like behaviors in a React Native environment. This approach allows developers to create complex, responsive layouts that were previously challenging or near-impossible to achieve in React Native.

Key features of the project include:

  1. Responsive Design: Adapts to both screen and container sizes for perfect display on any device.
  2. Dynamic Item Sizing: Supports both fixed and dynamic grid item dimensions.
  3. Virtualization Support: Enhances performance for large data sets.
  4. Two-Way Scrolling: Enables navigation beyond the initial viewport in both directions.
  5. Customizable: Offers a wide range of customization options.
  6. Minimal Dependencies: Built exclusively with React Native components.
  7. Universal Compatibility: Supports Android, iOS, and React native web.

The project currently consists of two main components:

  1. FlexGrid: Designed for highly flexible and dynamic grid layouts with two-way scrolling. (For Content that can scroll beyond the device viewport in both directions)
  2. ResponsiveGrid: Optimized for responsive designs that adjust based on container width.

The library has been published on Github & NPM as React Native Flexible Grid

Visual Examples

Here are two examples implemented using the library:

  1. Pinterest-style Layout:
    Pinterest-style Layout

    This example showcases the ability to create an uneven grid layout similar to Pinterest's home feed, with items of varying heights arranged in a visually appealing manner.

  2. Instagram Explore Page:
    Instagram Explore Page

    This demonstration shows how React Native Flexible Grid can be used to replicate the grid layout of Instagram's Explore page, featuring a mix of different-sized items in a responsive grid.

Relevant Technology

  • Language: TypeScript/JavaScript
  • Platform: React Native
  • Relevant libraries/frameworks:
    • React
    • React Native
    • Expo (for testing and examples)

Complexity and required time

Complexity

  • Intermediate

Required time (ETA)

  • Medium work - Requires regular updates, maintenance, and testing.

Categories

  • Mobile app
  • Web app
  • Frontend/UI
  • Developer Tooling

Call for Contributors, QA & Support

I am looking for contributors to help bring their experience to the project, making it more valuable to the React Native developer community. There are several areas where help is needed:

  1. Testing: Help create a comprehensive test suite to ensure reliability across different devices and use cases.

  2. Bug Finding: You can use the library in your projects and report any issues you encounter.

  3. Performance Benchmarking: Help measure and improve the performance of our grid components, especially for large datasets.

  4. Feature Enhancement: The project is looking to grow and introduce more CSS Grid-like features, including grid templates. If you have experience with CSS Grid, your insights would be invaluable.

  5. Documentation: Help improve our documentation to make it easier for new users to get started.

  6. Examples: Create and share example implementations to showcase the capabilities of the library.

Check out our GitHub repository at https://github.com/iNerdStack/react-native-flexible-grid to read more about the project

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant