Composants Carrousel et UI

VérifiéSûr

Crée des composants carrousel réutilisables et des affichages de données pour React et bots Telegram.

Spar Skills Guide Bot
DeveloppementIntermédiaire
1024/07/2026
Claude CodeCursorWindsurfCopilotCodex
#carousel#ui-components#react#telegram-bot#pagination

Recommandé pour

Notre avis

Construit des composants d'interface utilisateur réutilisables de type carrousel et d'affichage de données paginées pour les tableaux de bord React et les bots Telegram.

Points forts

  • Fournit des composants réutilisables et typés.
  • Prend en charge la lecture automatique et la pagination.
  • Fonctionne à la fois pour le web et Telegram.
  • Séparation claire des préoccupations.

Limites

  • Nécessite une intégration manuelle avec les sources de données.
  • L'implémentation Telegram est basique et peut nécessiter des extensions.
  • Ne constitue pas une bibliothèque de carrousel complète ; se concentre sur les fonctionnalités de base.
Quand l'utiliser

Lorsque vous avez besoin d'un composant carrousel léger et réutilisable pour un tableau de bord React ou d'un menu paginé pour un bot Telegram.

Quand l'éviter

Lorsque vous avez besoin d'animations avancées, de support du glissement tactile ou d'une bibliothèque de carrousel complète comme Slick.

Analyse de sécurité

Sûr
Score qualité85/100

The skill provides static code examples for UI components without any executable commands, network calls, or destructive actions. There is no risk of harm.

Aucun point d'attention détecté

Exemples

React carousel with autoplay
Create a reusable carousel component in React that displays dashboard cards with autoplay and navigation dots.
Telegram bot paginated menu
Build a paginated inline keyboard menu for a Telegram bot in Python with next/prev buttons.
Paginated data view
Implement a paginated data view component in React with previous and next buttons for navigating through items.

Carousel / UI Component Skill

Builds reusable carousel and data-display UI components.

When to Use

  • Building dashboard cards that display lists (balita, ibu hamil, reports)
  • Creating Telegram bot carousel menus with inline keyboard
  • Implementing paginated data views

Dashboard — React Carousel

Basic Carousel Component

// components/ui/Carousel.tsx
import { useState } from "react"

interface CarouselProps<T> {
  items: T[]
  renderItem: (item: T, index: number) => React.ReactNode
  keyExtractor: (item: T) => string
  autoPlay?: boolean
  interval?: number
}

export function Carousel<T>({ items, renderItem, keyExtractor, autoPlay, interval = 3000 }: CarouselProps<T>) {
  const [current, setCurrent] = useState(0)

  useEffect(() => {
    if (!autoPlay) return
    const timer = setInterval(() => {
      setCurrent(c => (c + 1) % items.length)
    }, interval)
    return () => clearInterval(timer)
  }, [autoPlay, interval, items.length])

  return (
    <div className="relative overflow-hidden">
      <div
        className="flex transition-transform duration-300"
        style={{ transform: `translateX(-${current * 100}%)` }}
      >
        {items.map((item, i) => (
          <div key={keyExtractor(item)} className="w-full flex-shrink-0">
            {renderItem(item, i)}
          </div>
        ))}
      </div>
      <div className="absolute bottom-2 left-1/2 flex gap-1">
        {items.map((_, i) => (
          <button
            key={i}
            onClick={() => setCurrent(i)}
            className={`w-2 h-2 rounded-full ${i === current ? "bg-blue-600" : "bg-gray-300"}`}
          />
        ))}
      </div>
    </div>
  )
}

Usage with Data Cards

<Carousel
  items={recentBalita}
  keyExtractor={(b) => b.id.toString()}
  renderItem={(balita) => <BalitaCard balita={balita} />}
/>

Telegram Bot — Inline Keyboard Carousel

Paginated Inline Keyboard

from telegram import InlineKeyboardButton, InlineKeyboardMarkup

ITEMS_PER_PAGE = 5

def build_pagination_keyboard(items: list, page: int, callback_prefix: str) -> InlineKeyboardMarkup:
    start = page * ITEMS_PER_PAGE
    end = start + ITEMS_PER_PAGE
    page_items = items[start:end]

    keyboard = []
    for item in page_items:
        keyboard.append([
            InlineKeyboardButton(
                f"📋 {item.name}",
                callback_data=f"{callback_prefix}:view:{item.id}"
            )
        ])

    nav = []
    if page > 0:
        nav.append(InlineKeyboardButton("◀️ Prev", callback_data=f"{callback_prefix}:page:{page-1}"))
    if end < len(items):
        nav.append(InlineKeyboardButton("Next ▶️", callback_data=f"{callback_prefix}:page:{page+1}"))
    if nav:
        keyboard.append(nav)

    return InlineKeyboardMarkup(keyboard)

Usage in Handler

async def list_items(update: Update, context: ContextTypes.DEFAULT_TYPE):
    items = await db.get_all()
    keyboard = build_pagination_keyboard(items, page=0, callback_prefix="item")
    await update.message.reply_text(f"Daftar ({len(items)} total):", reply_markup=keyboard)
Skills similaires