react-native-steve

React Native horizontal scroll view component as seen on Clubhouse tags.

react-native-steve

Installation

npm install react-native-steve

or

yarn add react-native-steve

Important

This component uses react-native-reanimated v2 so in order to use this component your app must be configured for reanimated v2

You need to provide a unique key for each item which will be rendered

Usage

import React from 'react'
import { StyleSheet, Text, View } from 'react-native'
import Steve from 'react-native-steve'

const topics = [
    {
        emoji: '🍻',
        text: 'Entertainment'
    },
    {
        emoji: '🐈',
        text: 'Cats'
    },
    {
        emoji: '🦾',
        text: 'Robots'
    },
    {
        emoji: '🎉',
        text: 'Party'
    },
    {
        emoji: '🌍',
        text: 'World'
    },
    {
        emoji: '📚',
        text: 'Books'
    },
    {
        emoji: '👘',
        text: 'Fashion'
    },
    {
        emoji: '📱',
        text: 'Applications'
    },
    {
        emoji: '📸',
        text: 'Photography'
    },
    {
        emoji: '🧠',
        text: 'Ideas'
    },
    {
        emoji: '⚔️',
        text: 'War'
    },
    {
        emoji: '💼',
        text: 'Business'
    },
    {
        emoji: '🎭',
        text: 'Theater'
    },
    {
        emoji: '📮',
        text: 'Job'
    }
]

export default function TopicsScreen() {
    const { topicContainer, topicText, title } = styles

    const renderTopic = ({ item }) => {
        const { emoji, text } = item
        return (
            <View style={topicContainer} >
                <Text >
                    {emoji}
                </Text >
                <Text style={topicText} >
                    {text}
                </Text >
            </View >
        )
    }

    return (
        <View style={styles.container} >
            <Text style={title} >
                {'TOPICS TO EXPLORE'}
            </Text >
            <Steve
                data={topics}
                renderItem={renderTopic}
                keyExtractor={item => item.text} />
        </View >
    )
}

App.displayName = 'App'

const styles = StyleSheet.create({
    container: {
        flex: 1,
        backgroundColor: '#FFF',
        justifyContent: 'center'
    },
    topicContainer: {
        borderWidth: 1,
        borderColor: '#ecd9d9',
        borderBottomWidth: 2,
        borderRadius: 10,
        paddingHorizontal: 10,
        height: 38,
        justifyContent: 'center',
        alignItems: 'center',
        flexDirection: 'row',
        margin: 5,
        backgroundColor: '#FFF'
    },
    topicText: {
        fontSize: 14,
        fontWeight: '500',
        marginLeft: 5
    },
    title: {
        fontSize: 13,
        color: 'rgb(134,130,119)',
        marginBottom: 5,
        marginLeft: 15,
        fontWeight: '600'
    }
})

Props

name required type default description
data yes Array An array of items to render
renderItem yes Function Function that returns a component with given item and index. It is similar to FlatList's renderItem prop
keyExtractor yes Function Function that returns an unique key for each item in the array. Notice that it is a must to provide a unique key since it's used to make calculations
containerStyle no Style Object Style to use for root component

GitHub

https://github.com/tsdmrfth/react-native-steve