AgentSkillsCN

frontend-development

当用户询问“React 管理后台”“Polaris 页面”“多语言支持”“可加载组件”“骨架加载”“useFetchApi”“useCreateApi”“locale”“i18n”,或任何管理后台前端开发相关需求时,可运用此技能。它将提供 React/Polaris 模式,助力打造嵌入式管理后台应用。

SKILL.md
--- frontmatter
name: frontend-development
description: Use this skill when the user asks about "React admin", "Polaris pages", "translations", "loadable components", "skeleton loading", "useFetchApi", "useCreateApi", "locale", "i18n", or any admin frontend development work. Provides React/Polaris patterns for the embedded admin app.

Frontend Development (packages/assets)

Admin Embedded App - Uses React + Shopify Polaris

For storefront widgets (customer-facing), see scripttag skill

Quick Reference

TopicReference File
i18n, Translation Keys, yarn update-labelreferences/translations.md
useFetchApi, useCreateApi, useEditApireferences/api-hooks.md
ui-save-bar, Loading Statesreferences/save-bar.md
Product/Collection Pickerreferences/resource-picker.md
New Page Checklist, Routes, Navigationreferences/creating-pages.md

Directory Structure

code
packages/assets/src/
├── components/        # Reusable React components
├── pages/            # Page components with skeleton loading
├── loadables/        # Code-split components (organized in folders)
├── contexts/         # React contexts for state management
├── hooks/            # Custom React hooks (API, state)
├── services/         # API services calling admin endpoints
├── routes/           # Route definitions (routes.js)
└── locale/           # Translations
    ├── input/        # Source translation JSON files
    └── output/       # Generated translated files

Quick Patterns

Translation Usage

javascript
import {useTranslation} from 'react-i18next';

function MyPage() {
  const {t} = useTranslation();
  return <Page title={t('MyPage.title')}>{t('MyPage.subtitle')}</Page>;
}

API Hooks

javascript
// Fetch data
const {data, loading, fetchApi} = useFetchApi({
  url: '/api/customers',
  defaultData: [],
  initLoad: true
});

// Create
const {creating, handleCreate} = useCreateApi({
  url: '/api/customers',
  successMsg: 'Created!',
  successCallback: () => fetchApi()
});

Skeleton Loading

javascript
function PageSkeleton() {
  return (
    <SkeletonPage primaryAction>
      <Layout>
        <Layout.Section>
          <Card>
            <SkeletonBodyText lines={5} />
          </Card>
        </Layout.Section>
      </Layout>
    </SkeletonPage>
  );
}

State Management

  • Use React Context for global state
  • Use local state for component-specific data
javascript
// contexts/ShopContext.js
const ShopContext = createContext();

export function ShopProvider({ children }) {
  const [shop, setShop] = useState(null);

  return (
    <ShopContext.Provider value={{ shop, setShop }}>
      {children}
    </ShopContext.Provider>
  );
}

export const useShop = () => useContext(ShopContext);

Component Guidelines

  • Use .js files only (no .jsx)
  • Always create loadable components in organized folders with index.js
  • All data-fetching pages must have skeleton loading states

Development Commands

bash
# Start embedded app development
cd packages/assets && npm run watch:embed

# Start standalone development
cd packages/assets && npm run watch:standalone

# Production build
cd packages/assets && npm run production