Get the FREE Ultimate OpenClaw Setup Guide →

fullstack-guide

npx machina-cli add skill VidyFoo/antigravity-skill-engine/fullstack-guide --openclaw
Files (1)
SKILL.md
4.5 KB

Frontend Development Guidelines

Purpose

Comprehensive guide for modern React development, emphasizing Suspense-based data fetching, lazy loading, proper file organization, and performance optimization.

When to Use This Skill

  • Creating new components or pages
  • Building new features
  • Fetching data with TanStack Query
  • Setting up routing with TanStack Router
  • Styling components with MUI v7
  • Performance optimization
  • Organizing frontend code
  • TypeScript best practices

Quick Start

New Component Checklist

Creating a component? Follow this checklist:

  • Use React.FC<Props> pattern with TypeScript
  • Lazy load if heavy component: React.lazy(() => import())
  • Wrap in <SuspenseLoader> for loading states
  • Use useSuspenseQuery for data fetching
  • Import aliases (@/, ~types, ~components)
  • Event handlers with useCallback
  • No early returns for loading states

Core Patterns

Component Pattern

import React, { useState, useCallback } from 'react';
import { Box, Paper } from '@mui/material';
import { useSuspenseQuery } from '@tanstack/react-query';
import { featureApi } from '../api/featureApi';
import type { FeatureData } from '~types/feature';

interface MyComponentProps {
    id: number;
    onAction?: () => void;
}

export const MyComponent: React.FC<MyComponentProps> = ({ id, onAction }) => {
    const [state, setState] = useState<string>('');

    const { data } = useSuspenseQuery({
        queryKey: ['feature', id],
        queryFn: () => featureApi.getFeature(id),
    });

    const handleAction = useCallback(() => {
        setState('updated');
        onAction?.();
    }, [onAction]);

    return (
        <Box sx={{ p: 2 }}>
            <Paper sx={{ p: 3 }}>
                {/* Content */}
            </Paper>
        </Box>
    );
};

export default MyComponent;

Data Fetching

// Use useSuspenseQuery - No isLoading checks needed!
const { data } = useSuspenseQuery({
    queryKey: ['myEntity', id],
    queryFn: () => myFeatureApi.getEntity(id),
});

// data is ALWAYS defined (Suspense handles loading)

Lazy Loading

// Lazy load heavy components
const HeavyComponent = React.lazy(() => import('./HeavyComponent'));

// Wrap in SuspenseLoader
<SuspenseLoader>
    <HeavyComponent />
</SuspenseLoader>

Anti-Patterns

❌ NEVER

  • Early returns for loading states (causes layout shift)
  • Use any type
  • Use makeStyles or styled() (use sx prop)
  • Use react-toastify (use useMuiSnackbar)
  • Direct API calls for auth (use useAuth hook)

✅ ALWAYS

  • React.FC<Props> with TypeScript
  • useSuspenseQuery for data fetching
  • Suspense boundaries for loading states
  • MUI v7 sx prop for styling
  • Import type for type imports

File Organization

features/ Directory

For domain-specific features with own logic and API:

features/
  my-feature/
    api/
      myFeatureApi.ts
    components/
      MyFeatureMain.tsx
    hooks/
      useMyFeature.ts
    types/
      index.ts
    index.ts

components/ Directory

For truly reusable UI components:

components/
  SuspenseLoader/
  CustomAppBar/
  ErrorBoundary/

Resource Files

TopicFile
Common patternscommon-patterns.md
Component patternscomponent-patterns.md
Data fetchingdata-fetching.md
File organizationfile-organization.md
Loading and errorsloading-and-error-states.md
Routing guiderouting-guide.md
Styling guidestyling-guide.md
TypeScript standardstypescript-standards.md

Related Skills

  • frontend-design: Visual design and aesthetics
  • backend-dev-guidelines: Backend API patterns that frontend consumes

Skill Status: COMPLETE ✅ Line Count: < 500 ✅ Progressive Disclosure: 8 resource files ✅

Source

git clone https://github.com/VidyFoo/antigravity-skill-engine/blob/main/.agent/skills/1-dev/fullstack-guide/SKILL.mdView on GitHub

Overview

这是一个覆盖 React/TS/Node/Supabase 的全栈开发规范百科,聚焦 Suspense 数据获取、懒加载、特征目录化的文件组织,以及性能优化。通过实际模式与示例,帮助在创建组件、页面、特征、获取数据、样式和路由,以及前后端协作中遵循最佳实践。

How This Skill Works

它通过核心模式如组件模式、数据获取和懒加载展示具体实现;使用 useSuspenseQuery 进行数据获取,React.lazy 和 SuspenseLoader 处理懒加载,采用 features/ 目录组织领域特征,并通过导入别名 (@/, ~types, ~components) 与 MUI 的 sx 风格实现高效前端结构。

When to Use It

  • 创建新组件或页面
  • 实现新特征或功能
  • 进行数据获取(TanStack Query/useSuspenseQuery)
  • 配置路由与样式(TanStack Router、MUI v7)
  • 优化性能并整理前端代码

Quick Start

  1. Step 1: 使用 TypeScript 的 React.FC<Props 制作新组件
  2. Step 2: 如组件较重,使用 React.lazy 引入并用 SuspenseLoader 包裹
  3. Step 3: 用 useSuspenseQuery 获取数据并配置导入别名

Best Practices

  • 使用 React.FC<Props> 与 TypeScript
  • 对数据获取使用 useSuspenseQuery
  • 为加载/错误使用 Suspense 边界
  • 使用 MUI v7 的 sx 样式,避免 makeStyles
  • 通过 import 路径别名(@/, ~types, ~components)导入并导入类型

Example Use Cases

  • MyComponent: TS+React.FC,useSuspenseQuery 获取 feature 数据
  • HeavyComponent: React.lazy 加载并用 SuspenseLoader 包裹
  • Feature 目录结构:features/my-feature/ 组织 api、hooks、types
  • 数据获取示例:useSuspenseQuery 的 queryKey 与 queryFn
  • 样式示例:MUI v7 sx 用于布局与样式

Frequently Asked Questions

Add this skill to your agents
Sponsor this space

Reach thousands of developers