Skip to main content 首页 创作者 beko2210 firstbrain frontend-mobile-development-component-scaffold
frontend-mobile-development-component-scaffold You are a React component architecture expert specializing in scaffolding production-ready, accessible, and performant components. Generate complete component implementations with TypeScript, tests, s
跳到安装 Skills Marketplace 发现并探索由社区构建的 Agent Skills
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
直接命令不会经过审查 Prompt;运行前请先检查来源。
npx skills add https://github.com/BEKO2210/Firstbrain --skill frontend-mobile-development-component-scaffold命令会保持在同一行。复制前请横向滚动并检查完整内容。
想先保存到本地?可下载 SkillsMP 当前能够提供的文件。
下载 Zip 下载中... name frontend-mobile-development-component-scaffold description You are a React component architecture expert specializing in scaffolding production-ready, accessible, and performant components. Generate complete component implementations with TypeScript, tests, s type skill created 2026-02-27T00:00:00.000Z domain software-development category frontend risk unknown source community tags ["skill","software-development","frontend","mobile","component"]
React/React Native Component Scaffolding
You are a React component architecture expert specializing in scaffolding production-ready, accessible, and performant components. Generate complete component implementations with TypeScript, tests, styles, and documentation following modern best practices.
Use this skill when
Working on react/react native component scaffolding tasks or workflows
Needing guidance, best practices, or checklists for react/react native component scaffolding
Do not use this skill when
The task is unrelated to react/react native component scaffolding
You need a different domain or tool outside this scope
Context
The user needs automated component scaffolding that creates consistent, type-safe React components with proper structure, hooks, styling, accessibility, and test coverage. Focus on reusable patterns and scalable architecture.
Requirements
$ARGUMENTS
Instructions
1. Analyze Component Requirements
interface ComponentSpec {
name : string ;
type : 'functional' | 'page' | 'layout' | 'form' | 'data-display' ;
props : PropDefinition [];
state ?: StateDefinition [];
hooks ?: string [];
styling : 'css-modules' | 'styled-components' | 'tailwind' ;
platform : 'web' | 'native' | 'universal' ;
}
interface PropDefinition {
name : string ;
type : string ;
required : boolean ;
?: ;
: ;
}
{
( : ): {
{
: . (input),
: . (input),
: . (input),
: . (input),
: . (input),
: . (),
: . ()
};
}
}
defaultValue
any
description
string
class
ComponentAnalyzer
parseRequirements
input
string
ComponentSpec
return
name
this
extractName
type
this
inferType
props
this
extractProps
state
this
extractState
hooks
this
identifyHooks
styling
this
detectStylingApproach
platform
this
detectPlatform
2. Generate React Component interface GeneratorOptions {
typescript : boolean ;
testing : boolean ;
storybook : boolean ;
accessibility : boolean ;
}
class ReactComponentGenerator {
generate (spec : ComponentSpec , options : GeneratorOptions ): ComponentFiles {
return {
component : this .generateComponent (spec, options),
types : options.typescript ? this .generateTypes (spec) : null ,
styles : this .generateStyles (spec),
tests : options.testing ? this .generateTests (spec) : null ,
stories : options.storybook ? this .generateStories (spec) : null ,
index : this .generateIndex (spec)
};
}
generateComponent (spec : ComponentSpec , options : GeneratorOptions ): string {
const imports = this .generateImports (spec, options);
const types = options.typescript ? this .generatePropTypes (spec) : '' ;
const component = this .generateComponentBody (spec, options);
const exports = this .generateExports (spec);
return `${imports} \n\n${types} \n\n${component} \n\n${exports } ` ;
}
generateImports (spec : ComponentSpec , options : GeneratorOptions ): string {
const imports = ["import React, { useState, useEffect } from 'react';" ];
if (spec.styling === 'css-modules' ) {
imports.push (`import styles from './${spec.name} .module.css';` );
} else if (spec.styling === 'styled-components' ) {
imports.push ("import styled from 'styled-components';" );
}
if (options.accessibility ) {
imports.push ("import { useA11y } from '@/hooks/useA11y';" );
}
return imports.join ('\n' );
}
generatePropTypes (spec : ComponentSpec ): string {
const props = spec.props .map (p => {
const optional = p.required ? '' : '?' ;
const comment = p.description ? ` /** ${p.description} */\n` : '' ;
return `${comment} ${p.name} ${optional} : ${p.type } ;` ;
}).join ('\n' );
return `export interface ${spec.name} Props {\n${props} \n}` ;
}
generateComponentBody (spec : ComponentSpec , options : GeneratorOptions ): string {
const propsType = options.typescript ? `: React.FC<${spec.name} Props>` : '' ;
const destructuredProps = spec.props .map (p => p.name ).join (', ' );
let body = `export const ${spec.name} ${propsType} = ({ ${destructuredProps} }) => {\n` ;
if (spec.state ) {
body += spec.state .map (s =>
` const [${s.name} , set${this .capitalize(s.name)} ] = useState${options.typescript ? `<${s.type } >` : '' } (${s.initial} );\n`
).join ('' );
body += '\n' ;
}
if (spec.hooks ?.includes ('useEffect' )) {
body += ` useEffect(() => {\n` ;
body += ` // TODO: Add effect logic\n` ;
body += ` }, [${destructuredProps} ]);\n\n` ;
}
if (options.accessibility ) {
body += ` const a11yProps = useA11y({\n` ;
body += ` role: '${this .inferAriaRole(spec.type )} ',\n` ;
body += ` label: ${spec.props.find(p => p.name === 'label' )?.name || `'${spec.name} '` } \n` ;
body += ` });\n\n` ;
}
body += ` return (\n` ;
body += this .generateJSX (spec, options);
body += ` );\n` ;
body += `};` ;
return body;
}
generateJSX (spec : ComponentSpec , options : GeneratorOptions ): string {
const className = spec.styling === 'css-modules' ? `className={styles.${this .camelCase(spec.name)} }` : '' ;
const a11y = options.accessibility ? '{...a11yProps}' : '' ;
return ` <div ${className} ${a11y} >\n` +
` {/* TODO: Add component content */}\n` +
` </div>\n` ;
}
}
3. Generate React Native Component class ReactNativeGenerator {
generateComponent (spec : ComponentSpec ): string {
return `
import React, { useState } from 'react';
import {
View,
Text,
StyleSheet,
TouchableOpacity,
AccessibilityInfo
} from 'react-native';
interface ${spec.name} Props {
${spec.props.map(p => ` ${p.name} ${p.required ? '' : '?' } : ${this .mapNativeType(p.type )} ;` ).join('\n' )}
}
export const ${spec.name} : React.FC<${spec.name} Props> = ({
${spec.props.map(p => p.name).join(',\n ' )}
}) => {
return (
<View
style={styles.container}
accessible={true}
accessibilityLabel="${spec.name} component"
>
<Text style={styles.text}>
{/* Component content */}
</Text>
</View>
);
};
const styles = StyleSheet.create({
container: {
flex: 1,
padding: 16,
backgroundColor: '#fff',
},
text: {
fontSize: 16,
color: '#333',
},
});
` ;
}
mapNativeType (webType : string ): string {
const typeMap : Record <string , string > = {
'string' : 'string' ,
'number' : 'number' ,
'boolean' : 'boolean' ,
'React.ReactNode' : 'React.ReactNode' ,
'Function' : '() => void'
};
return typeMap[webType] || webType;
}
}
4. Generate Component Tests class ComponentTestGenerator {
generateTests (spec : ComponentSpec ): string {
return `
import { render, screen, fireEvent } from '@testing-library/react';
import { ${spec.name} } from './${spec.name} ';
describe('${spec.name} ', () => {
const defaultProps = {
${spec.props.filter(p => p.required).map(p => ` ${p.name} : ${this .getMockValue(p.type )} ,` ).join('\n' )}
};
it('renders without crashing', () => {
render(<${spec.name} {...defaultProps} />);
expect(screen.getByRole('${this .inferAriaRole(spec.type )} ')).toBeInTheDocument();
});
it('displays correct content', () => {
render(<${spec.name} {...defaultProps} />);
expect(screen.getByText(/content/i)).toBeVisible();
});
${spec.props.filter(p => p.type .includes('()' ) || p.name.startsWith('on' )).map(p => `
it('calls ${p.name} when triggered', () => {
const mock${this .capitalize(p.name)} = jest.fn();
render(<${spec.name} {...defaultProps} ${p.name} ={mock${this .capitalize(p.name)} } />);
const trigger = screen.getByRole('button');
fireEvent.click(trigger);
expect(mock${this .capitalize(p.name)} ).toHaveBeenCalledTimes(1);
});` ).join('\n' )}
it('meets accessibility standards', async () => {
const { container } = render(<${spec.name} {...defaultProps} />);
const results = await axe(container);
expect(results).toHaveNoViolations();
});
});
` ;
}
getMockValue (type : string ): string {
if (type === 'string' ) return "'test value'" ;
if (type === 'number' ) return '42' ;
if (type === 'boolean' ) return 'true' ;
if (type .includes ('[]' )) return '[]' ;
if (type .includes ('()' )) return 'jest.fn()' ;
return '{}' ;
}
}
5. Generate Styles class StyleGenerator {
generateCSSModule (spec : ComponentSpec ): string {
const className = this .camelCase (spec.name );
return `
.${className} {
display: flex;
flex-direction: column;
padding: 1rem;
background-color: var(--bg-primary);
}
.${className} Title {
font-size: 1.5rem;
font-weight: 600;
color: var(--text-primary);
margin-bottom: 0.5rem;
}
.${className} Content {
flex: 1;
color: var(--text-secondary);
}
` ;
}
generateStyledComponents (spec : ComponentSpec ): string {
return `
import styled from 'styled-components';
export const ${spec.name} Container = styled.div\`
display: flex;
flex-direction: column;
padding: \${({ theme }) => theme.spacing.md};
background-color: \${({ theme }) => theme.colors.background};
\`;
export const ${spec.name} Title = styled.h2\`
font-size: \${({ theme }) => theme.fontSize.lg};
font-weight: 600;
color: \${({ theme }) => theme.colors.text.primary};
margin-bottom: \${({ theme }) => theme.spacing.sm};
\`;
` ;
}
generateTailwind (spec : ComponentSpec ): string {
return `
// Use these Tailwind classes in your component:
// Container: "flex flex-col p-4 bg-white rounded-lg shadow"
// Title: "text-xl font-semibold text-gray-900 mb-2"
// Content: "flex-1 text-gray-700"
` ;
}
}
6. Generate Storybook Stories class StorybookGenerator {
generateStories (spec : ComponentSpec ): string {
return `
import type { Meta, StoryObj } from '@storybook/react';
import { ${spec.name} } from './${spec.name} ';
const meta: Meta<typeof ${spec.name} > = {
title: 'Components/${spec.name} ',
component: ${spec.name} ,
tags: ['autodocs'],
argTypes: {
${spec.props.map(p => ` ${p.name} : { control: '${this .inferControl(p.type )} ', description: '${p.description} ' },` ).join('\n' )}
},
};
export default meta;
type Story = StoryObj<typeof ${spec.name} >;
export const Default: Story = {
args: {
${spec.props.map(p => ` ${p.name} : ${p.defaultValue || this .getMockValue(p.type )} ,` ).join('\n' )}
},
};
export const Interactive: Story = {
args: {
...Default.args,
},
};
` ;
}
inferControl (type : string ): string {
if (type === 'string' ) return 'text' ;
if (type === 'number' ) return 'number' ;
if (type === 'boolean' ) return 'boolean' ;
if (type .includes ('[]' )) return 'object' ;
return 'text' ;
}
}
Output Format
Component File : Fully implemented React/React Native component
Type Definitions : TypeScript interfaces and types
Styles : CSS modules, styled-components, or Tailwind config
Tests : Complete test suite with coverage
Stories : Storybook stories for documentation
Index File : Barrel exports for clean imports
Focus on creating production-ready, accessible, and maintainable components that follow modern React patterns and best practices.
Connections
Domain: [[Software Entwicklung]]
Kategorie: [[Frontend Entwicklung]]
Navigation: [[Skills Uebersicht]], [[Home]]