[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M716XR1EZEJCSC8HDBDPT0YA":3,"skill-same:01M716XR1EZEJCSC8HDBDPT0YA":271},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":16,"categories":17,"keywords":23,"publishedAt":44,"linkOnly":45,"markdownContent":46,"markdownBody":47,"frontMatter":48,"refName":50,"commitSha":51,"skillDirectory":52,"forksCount":14,"repositoryHtmlUrl":53,"repositoryHomepageUrl":6,"ownerHtmlUrl":54,"ownerBlogUrl":6,"ownerDescription":6,"updatedAt":55,"install":56,"resources":69},"01M716XR1EZEJCSC8HDBDPT0YA","react-best-practices",null,"Comprehensive performance optimization guide for React and Next.js applications, maintained by Vercel. Use when writing new React components or Next.js pages, implementing data fetching (client or server-side), or reviewing code for performance issues.","sapsapshen\u002Fai-memory-router","sapsapshen","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F20347959?v=4","01M6XDQEF1DP50DKF37H81J3J5","shenmian","01M6XDQEJPE41Y3DT2763X8ZJN",0,"MIT","https:\u002F\u002Fgithub.com\u002Fsapsapshen\u002Fai-memory-router\u002Fblob\u002Fmain\u002Fskills-store\u002Fcursor\u002Freact-best-practices\u002FSKILL.md",[18],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000009","前端开发","SCENARIO","使用场景",[24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],"react","best practices","react best practices","data","new","2026","when","data fetching","unknown","implementing","next","community","guide","writing","server","issues","code","react components","components","performance","2026-11-10 10:12:30",false,"---\nname: react-best-practices\ndescription: \"Comprehensive performance optimization guide for React and Next.js applications, maintained by Vercel. Use when writing new React components or Next.js pages, implementing data fetching (client or server-side), or reviewing code for performance issues.\"\nrisk: unknown\nsource: community\ndate_added: \"2026-02-27\"\n---\n\n# Vercel React Best Practices\n\nComprehensive performance optimization guide for React and Next.js applications, maintained by Vercel. Contains 45 rules across 8 categories, prioritized by impact to guide automated refactoring and code generation.\n\n## When to Use\nReference these guidelines when:\n- Writing new React components or Next.js pages\n- Implementing data fetching (client or server-side)\n- Reviewing code for performance issues\n- Refactoring existing React\u002FNext.js code\n- Optimizing bundle size or load times\n\n## Rule Categories by Priority\n\n| Priority | Category | Impact | Prefix |\n|----------|----------|--------|--------|\n| 1 | Eliminating Waterfalls | CRITICAL | `async-` |\n| 2 | Bundle Size Optimization | CRITICAL | `bundle-` |\n| 3 | Server-Side Performance | HIGH | `server-` |\n| 4 | Client-Side Data Fetching | MEDIUM-HIGH | `client-` |\n| 5 | Re-render Optimization | MEDIUM | `rerender-` |\n| 6 | Rendering Performance | MEDIUM | `rendering-` |\n| 7 | JavaScript Performance | LOW-MEDIUM | `js-` |\n| 8 | Advanced Patterns | LOW | `advanced-` |\n\n## Quick Reference\n\n### 1. Eliminating Waterfalls (CRITICAL)\n\n- `async-defer-await` - Move await into branches where actually used\n- `async-parallel` - Use Promise.all() for independent operations\n- `async-dependencies` - Use better-all for partial dependencies\n- `async-api-routes` - Start promises early, await late in API routes\n- `async-suspense-boundaries` - Use Suspense to stream content\n\n### 2. Bundle Size Optimization (CRITICAL)\n\n- `bundle-barrel-imports` - Import directly, avoid barrel files\n- `bundle-dynamic-imports` - Use next\u002Fdynamic for heavy components\n- `bundle-defer-third-party` - Load analytics\u002Flogging after hydration\n- `bundle-conditional` - Load modules only when feature is activated\n- `bundle-preload` - Preload on hover\u002Ffocus for perceived speed\n\n### 3. Server-Side Performance (HIGH)\n\n- `server-cache-react` - Use React.cache() for per-request deduplication\n- `server-cache-lru` - Use LRU cache for cross-request caching\n- `server-serialization` - Minimize data passed to client components\n- `server-parallel-fetching` - Restructure components to parallelize fetches\n- `server-after-nonblocking` - Use after() for non-blocking operations\n\n### 4. Client-Side Data Fetching (MEDIUM-HIGH)\n\n- `client-swr-dedup` - Use SWR for automatic request deduplication\n- `client-event-listeners` - Deduplicate global event listeners\n\n### 5. Re-render Optimization (MEDIUM)\n\n- `rerender-defer-reads` - Don't subscribe to state only used in callbacks\n- `rerender-memo` - Extract expensive work into memoized components\n- `rerender-dependencies` - Use primitive dependencies in effects\n- `rerender-derived-state` - Subscribe to derived booleans, not raw values\n- `rerender-functional-setstate` - Use functional setState for stable callbacks\n- `rerender-lazy-state-init` - Pass function to useState for expensive values\n- `rerender-transitions` - Use startTransition for non-urgent updates\n\n### 6. Rendering Performance (MEDIUM)\n\n- `rendering-animate-svg-wrapper` - Animate div wrapper, not SVG element\n- `rendering-content-visibility` - Use content-visibility for long lists\n- `rendering-hoist-jsx` - Extract static JSX outside components\n- `rendering-svg-precision` - Reduce SVG coordinate precision\n- `rendering-hydration-no-flicker` - Use inline script for client-only data\n- `rendering-activity` - Use Activity component for show\u002Fhide\n- `rendering-conditional-render` - Use ternary, not && for conditionals\n\n### 7. JavaScript Performance (LOW-MEDIUM)\n\n- `js-batch-dom-css` - Group CSS changes via classes or cssText\n- `js-index-maps` - Build Map for repeated lookups\n- `js-cache-property-access` - Cache object properties in loops\n- `js-cache-function-results` - Cache function results in module-level Map\n- `js-cache-storage` - Cache localStorage\u002FsessionStorage reads\n- `js-combine-iterations` - Combine multiple filter\u002Fmap into one loop\n- `js-length-check-first` - Check array length before expensive comparison\n- `js-early-exit` - Return early from functions\n- `js-hoist-regexp` - Hoist RegExp creation outside loops\n- `js-min-max-loop` - Use loop for min\u002Fmax instead of sort\n- `js-set-map-lookups` - Use Set\u002FMap for O(1) lookups\n- `js-tosorted-immutable` - Use toSorted() for immutability\n\n### 8. Advanced Patterns (LOW)\n\n- `advanced-event-handler-refs` - Store event handlers in refs\n- `advanced-use-latest` - useLatest for stable callback refs\n\n## How to Use\n\nRead individual rule files for detailed explanations and code examples:\n\n```\nrules\u002Fasync-parallel.md\nrules\u002Fbundle-barrel-imports.md\nrules\u002F_sections.md\n```\n\nEach rule file contains:\n- Brief explanation of why it matters\n- Incorrect code example with explanation\n- Correct code example with explanation\n- Additional context and references\n\n## Full Compiled Document\n\nFor the complete guide with all rules expanded: `AGENTS.md`\n\n## When to Use\nThis skill is applicable to execute the workflow or actions described in the overview.\n","# Vercel React Best Practices\n\nComprehensive performance optimization guide for React and Next.js applications, maintained by Vercel. Contains 45 rules across 8 categories, prioritized by impact to guide automated refactoring and code generation.\n\n## When to Use\nReference these guidelines when:\n- Writing new React components or Next.js pages\n- Implementing data fetching (client or server-side)\n- Reviewing code for performance issues\n- Refactoring existing React\u002FNext.js code\n- Optimizing bundle size or load times\n\n## Rule Categories by Priority\n\n| Priority | Category | Impact | Prefix |\n|----------|----------|--------|--------|\n| 1 | Eliminating Waterfalls | CRITICAL | `async-` |\n| 2 | Bundle Size Optimization | CRITICAL | `bundle-` |\n| 3 | Server-Side Performance | HIGH | `server-` |\n| 4 | Client-Side Data Fetching | MEDIUM-HIGH | `client-` |\n| 5 | Re-render Optimization | MEDIUM | `rerender-` |\n| 6 | Rendering Performance | MEDIUM | `rendering-` |\n| 7 | JavaScript Performance | LOW-MEDIUM | `js-` |\n| 8 | Advanced Patterns | LOW | `advanced-` |\n\n## Quick Reference\n\n### 1. Eliminating Waterfalls (CRITICAL)\n\n- `async-defer-await` - Move await into branches where actually used\n- `async-parallel` - Use Promise.all() for independent operations\n- `async-dependencies` - Use better-all for partial dependencies\n- `async-api-routes` - Start promises early, await late in API routes\n- `async-suspense-boundaries` - Use Suspense to stream content\n\n### 2. Bundle Size Optimization (CRITICAL)\n\n- `bundle-barrel-imports` - Import directly, avoid barrel files\n- `bundle-dynamic-imports` - Use next\u002Fdynamic for heavy components\n- `bundle-defer-third-party` - Load analytics\u002Flogging after hydration\n- `bundle-conditional` - Load modules only when feature is activated\n- `bundle-preload` - Preload on hover\u002Ffocus for perceived speed\n\n### 3. Server-Side Performance (HIGH)\n\n- `server-cache-react` - Use React.cache() for per-request deduplication\n- `server-cache-lru` - Use LRU cache for cross-request caching\n- `server-serialization` - Minimize data passed to client components\n- `server-parallel-fetching` - Restructure components to parallelize fetches\n- `server-after-nonblocking` - Use after() for non-blocking operations\n\n### 4. Client-Side Data Fetching (MEDIUM-HIGH)\n\n- `client-swr-dedup` - Use SWR for automatic request deduplication\n- `client-event-listeners` - Deduplicate global event listeners\n\n### 5. Re-render Optimization (MEDIUM)\n\n- `rerender-defer-reads` - Don't subscribe to state only used in callbacks\n- `rerender-memo` - Extract expensive work into memoized components\n- `rerender-dependencies` - Use primitive dependencies in effects\n- `rerender-derived-state` - Subscribe to derived booleans, not raw values\n- `rerender-functional-setstate` - Use functional setState for stable callbacks\n- `rerender-lazy-state-init` - Pass function to useState for expensive values\n- `rerender-transitions` - Use startTransition for non-urgent updates\n\n### 6. Rendering Performance (MEDIUM)\n\n- `rendering-animate-svg-wrapper` - Animate div wrapper, not SVG element\n- `rendering-content-visibility` - Use content-visibility for long lists\n- `rendering-hoist-jsx` - Extract static JSX outside components\n- `rendering-svg-precision` - Reduce SVG coordinate precision\n- `rendering-hydration-no-flicker` - Use inline script for client-only data\n- `rendering-activity` - Use Activity component for show\u002Fhide\n- `rendering-conditional-render` - Use ternary, not && for conditionals\n\n### 7. JavaScript Performance (LOW-MEDIUM)\n\n- `js-batch-dom-css` - Group CSS changes via classes or cssText\n- `js-index-maps` - Build Map for repeated lookups\n- `js-cache-property-access` - Cache object properties in loops\n- `js-cache-function-results` - Cache function results in module-level Map\n- `js-cache-storage` - Cache localStorage\u002FsessionStorage reads\n- `js-combine-iterations` - Combine multiple filter\u002Fmap into one loop\n- `js-length-check-first` - Check array length before expensive comparison\n- `js-early-exit` - Return early from functions\n- `js-hoist-regexp` - Hoist RegExp creation outside loops\n- `js-min-max-loop` - Use loop for min\u002Fmax instead of sort\n- `js-set-map-lookups` - Use Set\u002FMap for O(1) lookups\n- `js-tosorted-immutable` - Use toSorted() for immutability\n\n### 8. Advanced Patterns (LOW)\n\n- `advanced-event-handler-refs` - Store event handlers in refs\n- `advanced-use-latest` - useLatest for stable callback refs\n\n## How to Use\n\nRead individual rule files for detailed explanations and code examples:\n\n```\nrules\u002Fasync-parallel.md\nrules\u002Fbundle-barrel-imports.md\nrules\u002F_sections.md\n```\n\nEach rule file contains:\n- Brief explanation of why it matters\n- Incorrect code example with explanation\n- Correct code example with explanation\n- Additional context and references\n\n## Full Compiled Document\n\nFor the complete guide with all rules expanded: `AGENTS.md`\n\n## When to Use\nThis skill is applicable to execute the workflow or actions described in the overview.\n",{"name":5,"risk":32,"source":35,"date_added":49,"description":7},"2026-02-27","main","7a38d8e7073e61c16eda85681cb32fb68a8657a5","skills-store\u002Fcursor\u002Freact-best-practices","https:\u002F\u002Fgithub.com\u002Fsapsapshen\u002Fai-memory-router","https:\u002F\u002Fgithub.com\u002Fsapsapshen","2026-04-14 21:12:12",{"source":8,"skillName":5,"commands":57,"prompt":67,"zipAvailable":68},[58,61,64],{"tool":59,"command":60},"npx","npx skills add sapsapshen\u002Fai-memory-router --skill react-best-practices",{"tool":62,"command":63},"bunx","bunx skills add sapsapshen\u002Fai-memory-router --skill react-best-practices",{"tool":65,"command":66},"pnpm","pnpm dlx skills add sapsapshen\u002Fai-memory-router --skill react-best-practices","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fsapsapshen\u002Fai-memory-router\u002Fblob\u002Fmain\u002Fskills-store\u002Fcursor\u002Freact-best-practices\u002FSKILL.md",true,[70,76,80,84,88,92,96,100,104,108,112,116,120,124,128,132,136,140,144,148,152,156,160,164,168,172,176,180,184,188,191,195,199,203,207,211,215,219,223,227,231,235,239,243,247,251,255,259,263,267],{"path":71,"resourceType":72,"resourceTypeDesc":73,"sizeBytes":74,"sourceHtmlUrl":75},"AGENTS.md","REFERENCE","参考文档",60535,"https:\u002F\u002Fgithub.com\u002Fsapsapshen\u002Fai-memory-router\u002Fblob\u002Fmain\u002Fskills-store\u002Fcursor\u002Freact-best-practices\u002FAGENTS.md",{"path":77,"resourceType":72,"resourceTypeDesc":73,"sizeBytes":78,"sourceHtmlUrl":79},"metadata.json",921,"https:\u002F\u002Fgithub.com\u002Fsapsapshen\u002Fai-memory-router\u002Fblob\u002Fmain\u002Fskills-store\u002Fcursor\u002Freact-best-practices\u002Fmetadata.json",{"path":81,"resourceType":72,"resourceTypeDesc":73,"sizeBytes":82,"sourceHtmlUrl":83},"README.md",3360,"https:\u002F\u002Fgithub.com\u002Fsapsapshen\u002Fai-memory-router\u002Fblob\u002Fmain\u002Fskills-store\u002Fcursor\u002Freact-best-practices\u002FREADME.md",{"path":85,"resourceType":72,"resourceTypeDesc":73,"sizeBytes":86,"sourceHtmlUrl":87},"rules\u002F_sections.md",1554,"https:\u002F\u002Fgithub.com\u002Fsapsapshen\u002Fai-memory-router\u002Fblob\u002Fmain\u002Fskills-store\u002Fcursor\u002Freact-best-practices\u002Frules\u002F_sections.md",{"path":89,"resourceType":72,"resourceTypeDesc":73,"sizeBytes":90,"sourceHtmlUrl":91},"rules\u002F_template.md",631,"https:\u002F\u002Fgithub.com\u002Fsapsapshen\u002Fai-memory-router\u002Fblob\u002Fmain\u002Fskills-store\u002Fcursor\u002Freact-best-practices\u002Frules\u002F_template.md",{"path":93,"resourceType":72,"resourceTypeDesc":73,"sizeBytes":94,"sourceHtmlUrl":95},"rules\u002Fadvanced-event-handler-refs.md",1478,"https:\u002F\u002Fgithub.com\u002Fsapsapshen\u002Fai-memory-router\u002Fblob\u002Fmain\u002Fskills-store\u002Fcursor\u002Freact-best-practices\u002Frules\u002Fadvanced-event-handler-refs.md",{"path":97,"resourceType":72,"resourceTypeDesc":73,"sizeBytes":98,"sourceHtmlUrl":99},"rules\u002Fadvanced-use-latest.md",1191,"https:\u002F\u002Fgithub.com\u002Fsapsapshen\u002Fai-memory-router\u002Fblob\u002Fmain\u002Fskills-store\u002Fcursor\u002Freact-best-practices\u002Frules\u002Fadvanced-use-latest.md",{"path":101,"resourceType":72,"resourceTypeDesc":73,"sizeBytes":102,"sourceHtmlUrl":103},"rules\u002Fasync-api-routes.md",1125,"https:\u002F\u002Fgithub.com\u002Fsapsapshen\u002Fai-memory-router\u002Fblob\u002Fmain\u002Fskills-store\u002Fcursor\u002Freact-best-practices\u002Frules\u002Fasync-api-routes.md",{"path":105,"resourceType":72,"resourceTypeDesc":73,"sizeBytes":106,"sourceHtmlUrl":107},"rules\u002Fasync-defer-await.md",2028,"https:\u002F\u002Fgithub.com\u002Fsapsapshen\u002Fai-memory-router\u002Fblob\u002Fmain\u002Fskills-store\u002Fcursor\u002Freact-best-practices\u002Frules\u002Fasync-defer-await.md",{"path":109,"resourceType":72,"resourceTypeDesc":73,"sizeBytes":110,"sourceHtmlUrl":111},"rules\u002Fasync-dependencies.md",942,"https:\u002F\u002Fgithub.com\u002Fsapsapshen\u002Fai-memory-router\u002Fblob\u002Fmain\u002Fskills-store\u002Fcursor\u002Freact-best-practices\u002Frules\u002Fasync-dependencies.md",{"path":113,"resourceType":72,"resourceTypeDesc":73,"sizeBytes":114,"sourceHtmlUrl":115},"rules\u002Fasync-parallel.md",654,"https:\u002F\u002Fgithub.com\u002Fsapsapshen\u002Fai-memory-router\u002Fblob\u002Fmain\u002Fskills-store\u002Fcursor\u002Freact-best-practices\u002Frules\u002Fasync-parallel.md",{"path":117,"resourceType":72,"resourceTypeDesc":73,"sizeBytes":118,"sourceHtmlUrl":119},"rules\u002Fasync-suspense-boundaries.md",2510,"https:\u002F\u002Fgithub.com\u002Fsapsapshen\u002Fai-memory-router\u002Fblob\u002Fmain\u002Fskills-store\u002Fcursor\u002Freact-best-practices\u002Frules\u002Fasync-suspense-boundaries.md",{"path":121,"resourceType":72,"resourceTypeDesc":73,"sizeBytes":122,"sourceHtmlUrl":123},"rules\u002Fbundle-barrel-imports.md",2370,"https:\u002F\u002Fgithub.com\u002Fsapsapshen\u002Fai-memory-router\u002Fblob\u002Fmain\u002Fskills-store\u002Fcursor\u002Freact-best-practices\u002Frules\u002Fbundle-barrel-imports.md",{"path":125,"resourceType":72,"resourceTypeDesc":73,"sizeBytes":126,"sourceHtmlUrl":127},"rules\u002Fbundle-conditional.md",866,"https:\u002F\u002Fgithub.com\u002Fsapsapshen\u002Fai-memory-router\u002Fblob\u002Fmain\u002Fskills-store\u002Fcursor\u002Freact-best-practices\u002Frules\u002Fbundle-conditional.md",{"path":129,"resourceType":72,"resourceTypeDesc":73,"sizeBytes":130,"sourceHtmlUrl":131},"rules\u002Fbundle-defer-third-party.md",920,"https:\u002F\u002Fgithub.com\u002Fsapsapshen\u002Fai-memory-router\u002Fblob\u002Fmain\u002Fskills-store\u002Fcursor\u002Freact-best-practices\u002Frules\u002Fbundle-defer-third-party.md",{"path":133,"resourceType":72,"resourceTypeDesc":73,"sizeBytes":134,"sourceHtmlUrl":135},"rules\u002Fbundle-dynamic-imports.md",791,"https:\u002F\u002Fgithub.com\u002Fsapsapshen\u002Fai-memory-router\u002Fblob\u002Fmain\u002Fskills-store\u002Fcursor\u002Freact-best-practices\u002Frules\u002Fbundle-dynamic-imports.md",{"path":137,"resourceType":72,"resourceTypeDesc":73,"sizeBytes":138,"sourceHtmlUrl":139},"rules\u002Fbundle-preload.md",1149,"https:\u002F\u002Fgithub.com\u002Fsapsapshen\u002Fai-memory-router\u002Fblob\u002Fmain\u002Fskills-store\u002Fcursor\u002Freact-best-practices\u002Frules\u002Fbundle-preload.md",{"path":141,"resourceType":72,"resourceTypeDesc":73,"sizeBytes":142,"sourceHtmlUrl":143},"rules\u002Fclient-event-listeners.md",1969,"https:\u002F\u002Fgithub.com\u002Fsapsapshen\u002Fai-memory-router\u002Fblob\u002Fmain\u002Fskills-store\u002Fcursor\u002Freact-best-practices\u002Frules\u002Fclient-event-listeners.md",{"path":145,"resourceType":72,"resourceTypeDesc":73,"sizeBytes":146,"sourceHtmlUrl":147},"rules\u002Fclient-swr-dedup.md",1159,"https:\u002F\u002Fgithub.com\u002Fsapsapshen\u002Fai-memory-router\u002Fblob\u002Fmain\u002Fskills-store\u002Fcursor\u002Freact-best-practices\u002Frules\u002Fclient-swr-dedup.md",{"path":149,"resourceType":72,"resourceTypeDesc":73,"sizeBytes":150,"sourceHtmlUrl":151},"rules\u002Fjs-batch-dom-css.md",1902,"https:\u002F\u002Fgithub.com\u002Fsapsapshen\u002Fai-memory-router\u002Fblob\u002Fmain\u002Fskills-store\u002Fcursor\u002Freact-best-practices\u002Frules\u002Fjs-batch-dom-css.md",{"path":153,"resourceType":72,"resourceTypeDesc":73,"sizeBytes":154,"sourceHtmlUrl":155},"rules\u002Fjs-cache-function-results.md",1949,"https:\u002F\u002Fgithub.com\u002Fsapsapshen\u002Fai-memory-router\u002Fblob\u002Fmain\u002Fskills-store\u002Fcursor\u002Freact-best-practices\u002Frules\u002Fjs-cache-function-results.md",{"path":157,"resourceType":72,"resourceTypeDesc":73,"sizeBytes":158,"sourceHtmlUrl":159},"rules\u002Fjs-cache-property-access.md",532,"https:\u002F\u002Fgithub.com\u002Fsapsapshen\u002Fai-memory-router\u002Fblob\u002Fmain\u002Fskills-store\u002Fcursor\u002Freact-best-practices\u002Frules\u002Fjs-cache-property-access.md",{"path":161,"resourceType":72,"resourceTypeDesc":73,"sizeBytes":162,"sourceHtmlUrl":163},"rules\u002Fjs-cache-storage.md",1651,"https:\u002F\u002Fgithub.com\u002Fsapsapshen\u002Fai-memory-router\u002Fblob\u002Fmain\u002Fskills-store\u002Fcursor\u002Freact-best-practices\u002Frules\u002Fjs-cache-storage.md",{"path":165,"resourceType":72,"resourceTypeDesc":73,"sizeBytes":166,"sourceHtmlUrl":167},"rules\u002Fjs-combine-iterations.md",753,"https:\u002F\u002Fgithub.com\u002Fsapsapshen\u002Fai-memory-router\u002Fblob\u002Fmain\u002Fskills-store\u002Fcursor\u002Freact-best-practices\u002Frules\u002Fjs-combine-iterations.md",{"path":169,"resourceType":72,"resourceTypeDesc":73,"sizeBytes":170,"sourceHtmlUrl":171},"rules\u002Fjs-early-exit.md",1133,"https:\u002F\u002Fgithub.com\u002Fsapsapshen\u002Fai-memory-router\u002Fblob\u002Fmain\u002Fskills-store\u002Fcursor\u002Freact-best-practices\u002Frules\u002Fjs-early-exit.md",{"path":173,"resourceType":72,"resourceTypeDesc":73,"sizeBytes":174,"sourceHtmlUrl":175},"rules\u002Fjs-hoist-regexp.md",1028,"https:\u002F\u002Fgithub.com\u002Fsapsapshen\u002Fai-memory-router\u002Fblob\u002Fmain\u002Fskills-store\u002Fcursor\u002Freact-best-practices\u002Frules\u002Fjs-hoist-regexp.md",{"path":177,"resourceType":72,"resourceTypeDesc":73,"sizeBytes":178,"sourceHtmlUrl":179},"rules\u002Fjs-index-maps.md",837,"https:\u002F\u002Fgithub.com\u002Fsapsapshen\u002Fai-memory-router\u002Fblob\u002Fmain\u002Fskills-store\u002Fcursor\u002Freact-best-practices\u002Frules\u002Fjs-index-maps.md",{"path":181,"resourceType":72,"resourceTypeDesc":73,"sizeBytes":182,"sourceHtmlUrl":183},"rules\u002Fjs-length-check-first.md",1752,"https:\u002F\u002Fgithub.com\u002Fsapsapshen\u002Fai-memory-router\u002Fblob\u002Fmain\u002Fskills-store\u002Fcursor\u002Freact-best-practices\u002Frules\u002Fjs-length-check-first.md",{"path":185,"resourceType":72,"resourceTypeDesc":73,"sizeBytes":186,"sourceHtmlUrl":187},"rules\u002Fjs-min-max-loop.md",2105,"https:\u002F\u002Fgithub.com\u002Fsapsapshen\u002Fai-memory-router\u002Fblob\u002Fmain\u002Fskills-store\u002Fcursor\u002Freact-best-practices\u002Frules\u002Fjs-min-max-loop.md",{"path":189,"resourceType":72,"resourceTypeDesc":73,"sizeBytes":158,"sourceHtmlUrl":190},"rules\u002Fjs-set-map-lookups.md","https:\u002F\u002Fgithub.com\u002Fsapsapshen\u002Fai-memory-router\u002Fblob\u002Fmain\u002Fskills-store\u002Fcursor\u002Freact-best-practices\u002Frules\u002Fjs-set-map-lookups.md",{"path":192,"resourceType":72,"resourceTypeDesc":73,"sizeBytes":193,"sourceHtmlUrl":194},"rules\u002Fjs-tosorted-immutable.md",1782,"https:\u002F\u002Fgithub.com\u002Fsapsapshen\u002Fai-memory-router\u002Fblob\u002Fmain\u002Fskills-store\u002Fcursor\u002Freact-best-practices\u002Frules\u002Fjs-tosorted-immutable.md",{"path":196,"resourceType":72,"resourceTypeDesc":73,"sizeBytes":197,"sourceHtmlUrl":198},"rules\u002Frendering-activity.md",564,"https:\u002F\u002Fgithub.com\u002Fsapsapshen\u002Fai-memory-router\u002Fblob\u002Fmain\u002Fskills-store\u002Fcursor\u002Freact-best-practices\u002Frules\u002Frendering-activity.md",{"path":200,"resourceType":72,"resourceTypeDesc":73,"sizeBytes":201,"sourceHtmlUrl":202},"rules\u002Frendering-animate-svg-wrapper.md",1185,"https:\u002F\u002Fgithub.com\u002Fsapsapshen\u002Fai-memory-router\u002Fblob\u002Fmain\u002Fskills-store\u002Fcursor\u002Freact-best-practices\u002Frules\u002Frendering-animate-svg-wrapper.md",{"path":204,"resourceType":72,"resourceTypeDesc":73,"sizeBytes":205,"sourceHtmlUrl":206},"rules\u002Frendering-conditional-render.md",980,"https:\u002F\u002Fgithub.com\u002Fsapsapshen\u002Fai-memory-router\u002Fblob\u002Fmain\u002Fskills-store\u002Fcursor\u002Freact-best-practices\u002Frules\u002Frendering-conditional-render.md",{"path":208,"resourceType":72,"resourceTypeDesc":73,"sizeBytes":209,"sourceHtmlUrl":210},"rules\u002Frendering-content-visibility.md",815,"https:\u002F\u002Fgithub.com\u002Fsapsapshen\u002Fai-memory-router\u002Fblob\u002Fmain\u002Fskills-store\u002Fcursor\u002Freact-best-practices\u002Frules\u002Frendering-content-visibility.md",{"path":212,"resourceType":72,"resourceTypeDesc":73,"sizeBytes":213,"sourceHtmlUrl":214},"rules\u002Frendering-hoist-jsx.md",1039,"https:\u002F\u002Fgithub.com\u002Fsapsapshen\u002Fai-memory-router\u002Fblob\u002Fmain\u002Fskills-store\u002Fcursor\u002Freact-best-practices\u002Frules\u002Frendering-hoist-jsx.md",{"path":216,"resourceType":72,"resourceTypeDesc":73,"sizeBytes":217,"sourceHtmlUrl":218},"rules\u002Frendering-hydration-no-flicker.md",2308,"https:\u002F\u002Fgithub.com\u002Fsapsapshen\u002Fai-memory-router\u002Fblob\u002Fmain\u002Fskills-store\u002Fcursor\u002Freact-best-practices\u002Frules\u002Frendering-hydration-no-flicker.md",{"path":220,"resourceType":72,"resourceTypeDesc":73,"sizeBytes":221,"sourceHtmlUrl":222},"rules\u002Frendering-svg-precision.md",588,"https:\u002F\u002Fgithub.com\u002Fsapsapshen\u002Fai-memory-router\u002Fblob\u002Fmain\u002Fskills-store\u002Fcursor\u002Freact-best-practices\u002Frules\u002Frendering-svg-precision.md",{"path":224,"resourceType":72,"resourceTypeDesc":73,"sizeBytes":225,"sourceHtmlUrl":226},"rules\u002Frerender-defer-reads.md",973,"https:\u002F\u002Fgithub.com\u002Fsapsapshen\u002Fai-memory-router\u002Fblob\u002Fmain\u002Fskills-store\u002Fcursor\u002Freact-best-practices\u002Frules\u002Frerender-defer-reads.md",{"path":228,"resourceType":72,"resourceTypeDesc":73,"sizeBytes":229,"sourceHtmlUrl":230},"rules\u002Frerender-dependencies.md",824,"https:\u002F\u002Fgithub.com\u002Fsapsapshen\u002Fai-memory-router\u002Fblob\u002Fmain\u002Fskills-store\u002Fcursor\u002Freact-best-practices\u002Frules\u002Frerender-dependencies.md",{"path":232,"resourceType":72,"resourceTypeDesc":73,"sizeBytes":233,"sourceHtmlUrl":234},"rules\u002Frerender-derived-state.md",724,"https:\u002F\u002Fgithub.com\u002Fsapsapshen\u002Fai-memory-router\u002Fblob\u002Fmain\u002Fskills-store\u002Fcursor\u002Freact-best-practices\u002Frules\u002Frerender-derived-state.md",{"path":236,"resourceType":72,"resourceTypeDesc":73,"sizeBytes":237,"sourceHtmlUrl":238},"rules\u002Frerender-functional-setstate.md",2968,"https:\u002F\u002Fgithub.com\u002Fsapsapshen\u002Fai-memory-router\u002Fblob\u002Fmain\u002Fskills-store\u002Fcursor\u002Freact-best-practices\u002Frules\u002Frerender-functional-setstate.md",{"path":240,"resourceType":72,"resourceTypeDesc":73,"sizeBytes":241,"sourceHtmlUrl":242},"rules\u002Frerender-lazy-state-init.md",2016,"https:\u002F\u002Fgithub.com\u002Fsapsapshen\u002Fai-memory-router\u002Fblob\u002Fmain\u002Fskills-store\u002Fcursor\u002Freact-best-practices\u002Frules\u002Frerender-lazy-state-init.md",{"path":244,"resourceType":72,"resourceTypeDesc":73,"sizeBytes":245,"sourceHtmlUrl":246},"rules\u002Frerender-memo.md",1148,"https:\u002F\u002Fgithub.com\u002Fsapsapshen\u002Fai-memory-router\u002Fblob\u002Fmain\u002Fskills-store\u002Fcursor\u002Freact-best-practices\u002Frules\u002Frerender-memo.md",{"path":248,"resourceType":72,"resourceTypeDesc":73,"sizeBytes":249,"sourceHtmlUrl":250},"rules\u002Frerender-transitions.md",1055,"https:\u002F\u002Fgithub.com\u002Fsapsapshen\u002Fai-memory-router\u002Fblob\u002Fmain\u002Fskills-store\u002Fcursor\u002Freact-best-practices\u002Frules\u002Frerender-transitions.md",{"path":252,"resourceType":72,"resourceTypeDesc":73,"sizeBytes":253,"sourceHtmlUrl":254},"rules\u002Fserver-after-nonblocking.md",2012,"https:\u002F\u002Fgithub.com\u002Fsapsapshen\u002Fai-memory-router\u002Fblob\u002Fmain\u002Fskills-store\u002Fcursor\u002Freact-best-practices\u002Frules\u002Fserver-after-nonblocking.md",{"path":256,"resourceType":72,"resourceTypeDesc":73,"sizeBytes":257,"sourceHtmlUrl":258},"rules\u002Fserver-cache-lru.md",1353,"https:\u002F\u002Fgithub.com\u002Fsapsapshen\u002Fai-memory-router\u002Fblob\u002Fmain\u002Fskills-store\u002Fcursor\u002Freact-best-practices\u002Frules\u002Fserver-cache-lru.md",{"path":260,"resourceType":72,"resourceTypeDesc":73,"sizeBytes":261,"sourceHtmlUrl":262},"rules\u002Fserver-cache-react.md",681,"https:\u002F\u002Fgithub.com\u002Fsapsapshen\u002Fai-memory-router\u002Fblob\u002Fmain\u002Fskills-store\u002Fcursor\u002Freact-best-practices\u002Frules\u002Fserver-cache-react.md",{"path":264,"resourceType":72,"resourceTypeDesc":73,"sizeBytes":265,"sourceHtmlUrl":266},"rules\u002Fserver-parallel-fetching.md",1515,"https:\u002F\u002Fgithub.com\u002Fsapsapshen\u002Fai-memory-router\u002Fblob\u002Fmain\u002Fskills-store\u002Fcursor\u002Freact-best-practices\u002Frules\u002Fserver-parallel-fetching.md",{"path":268,"resourceType":72,"resourceTypeDesc":73,"sizeBytes":269,"sourceHtmlUrl":270},"rules\u002Fserver-serialization.md",996,"https:\u002F\u002Fgithub.com\u002Fsapsapshen\u002Fai-memory-router\u002Fblob\u002Fmain\u002Fskills-store\u002Fcursor\u002Freact-best-practices\u002Frules\u002Fserver-serialization.md",[272,296,320,330,343,360],{"skillNo":273,"name":274,"nameZh":6,"description":275,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":276,"categories":277,"keywords":283,"publishedAt":44},"01M71ATQRKG48SH06FQ697T5G9","wechat-search","Search WeChat Official Account articles using OpenClaw's web search and fetch capabilities with compliance-focused design.","https:\u002F\u002Fgithub.com\u002Fsapsapshen\u002Fai-memory-router\u002Fblob\u002Fmain\u002Fskills-store\u002Fopenclaw\u002Fwechat-search-release\u002FSKILL.md",[278],{"categoryNo":279,"categoryName":280,"taxonomyType":281,"taxonomyTypeDesc":282},"01JBSEEDCAT000000000000037","律师与法务","PROFESSION","适用职业",[284,285,286,287,288,289,290,291,292,293,294,295],"wechat search","wechat","search","capabilities","openclaw","design","web search","compliance","web","official","fetch","with",{"skillNo":297,"name":298,"nameZh":6,"description":299,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":300,"categories":301,"keywords":302,"publishedAt":44},"01M71ATNAVGZB35PFYM2GC5N00","trend-tap","Real-time trending topics aggregator across 7 platforms (X\u002FTwitter, Reddit, Google Trends, Hacker News, Zhihu, Bilibili, Weibo). Trigger: when user says 'trend', 'trends', 'trend tap', '热点', '热搜', or asks what is trending\u002Fhot. Do NOT use web_search — this skill already fetches live data from all platforms with zero API keys.","https:\u002F\u002Fgithub.com\u002Fsapsapshen\u002Fai-memory-router\u002Fblob\u002Fmain\u002Fskills-store\u002Fopenclaw\u002Ftrend-tap\u002FSKILL.md",[],[303,304,305,306,307,308,286,309,310,311,312,30,313,314,27,315,316,317,318,319],"trend","trend tap","tap","api keys","Bash","time","trending","hacker","aggregator","do","brew","live","google","install","read","across","api",{"skillNo":321,"name":322,"nameZh":6,"description":323,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":324,"categories":325,"keywords":326,"publishedAt":44},"01M71ATJ9AM5KM15AA8PS302EB","trend-radar","Real-time trending topics aggregator across 7 platforms (X\u002FTwitter, Reddit, Google Trends, Hacker News, Zhihu, Bilibili, Weibo). Trigger: when user says 'trend', 'trends', 'trend pulse', '热点', '热搜', or asks what is trending\u002Fhot. Do NOT use web_search — this skill already fetches live data from all platforms with zero API keys.","https:\u002F\u002Fgithub.com\u002Fsapsapshen\u002Fai-memory-router\u002Fblob\u002Fmain\u002Fskills-store\u002Fopenclaw\u002Ftrend-radar\u002FSKILL.md",[],[327,328,303,313,314,27,315,307,286,317,329,318,319,30,311,310,309,316,308,306],"trend radar","radar","pulse",{"skillNo":331,"name":332,"nameZh":6,"description":333,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":334,"categories":335,"keywords":336,"publishedAt":44},"01M71ATGF095N3EJM9G8SD0BB5","tech-news-daily","每日科技新闻汇——从全球多个 RSS 源抓取最新科技新闻，翻译（英→中）、去重、排版成每日简报。当用户询问科技新闻、科技新鲜事、每日科技、技术动态、Daily Tech News 或类似表达时触发此技能。","https:\u002F\u002Fgithub.com\u002Fsapsapshen\u002Fai-memory-router\u002Fblob\u002Fmain\u002Fskills-store\u002Fopenclaw\u002Ftech-news-daily\u002FSKILL.md",[],[337,338,339,340,341,342],"news","tech","tech news daily","daily","rss","翻译",{"skillNo":344,"name":345,"nameZh":6,"description":346,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":347,"categories":348,"keywords":352,"publishedAt":44},"01M71ATFAEAMQ17M70NQNY7SR8","summarize","Summarize URLs or files with the summarize CLI (web, PDFs, images, audio, YouTube).","https:\u002F\u002Fgithub.com\u002Fsapsapshen\u002Fai-memory-router\u002Fblob\u002Fmain\u002Fskills-store\u002Fopenclaw\u002Fsummarize\u002FSKILL.md",[349],{"categoryNo":350,"categoryName":351,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000021","资料检索与研究",[345,292,353,354,355,295,313,356,357,358,305,359,316],"Audio","cli","youtube","images","https","files","pdfs",{"skillNo":361,"name":362,"nameZh":6,"description":363,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":364,"categories":365,"keywords":366,"publishedAt":44},"01M71ATDNS3R0M4H936PACQAWZ","sonoscli","Control Sonos speakers (discover\u002Fstatus\u002Fplay\u002Fvolume\u002Fgroup).","https:\u002F\u002Fgithub.com\u002Fsapsapshen\u002Fai-memory-router\u002Fblob\u002Fmain\u002Fskills-store\u002Fopenclaw\u002Fsonoscli\u002FSKILL.md",[],[362,367,368,369,316,370,357,371,372,373,374,375],"status","play","go","latest","github","discover","control","cmd","volume"]