Token导航 LogoToken导航

Agent Skill · 开发规范

r3f-best-practices(r3f 最佳实践)

r3f-best-practices 用于处理 GitHub 仓库、Issue、Pull Request 和代码协作信息,适合在 Codex、Claude、Cursor、Gemini CLI 中需要围绕仓库状态、代码变更或协作事项进行整理时使用。可结合来源仓库、安装命令和原始 README 继续核验具体用法。安装前建议确认权限范围、维护状态,以及是否会触发联网、命令执行或文件读写。

r3f-best-practices 是开发规范类 Agent Skill,可用宿主为 Codex、Claude、Cursor、Gemini CLI,通过GitHub 仓库获取,权限为需要联网;许可证为 MIT,第三方扫描已通过,按安装量在开发规范类的 1,265 个 Skill 里排第 156。

总安装 10,466周安装 445GitHub Stars 19下载 3,667核验 2026-05-01

安装说明

本站只整理中文说明,不托管安装包,也不代用户安装。
GitHub
许可证
MIT

安装方式

通过对话安装

复制提示词发给支持本地命令或 Skills 的 AI 助手,先确认命令和权限,再让它执行。

请帮我安装这个 Agent Skill:r3f-best-practices(r3f 最佳实践)
来源仓库:https://github.com/emalorenzo/three-agent-skills
仓库路径:skills/r3f-best-practices
安装命令:
npx skills add https://github.com/emalorenzo/three-agent-skills --skill r3f-best-practices
安装前请先检查当前环境是否支持对应 CLI,并向我确认将要执行的命令、安装目录、联网范围和文件读写权限;确认后再执行。

命令行安装

复制命令到本机终端执行。不同来源提供的安装方式可能略有差异;本站展示可直接复制的安装命令,安装前请核对来源页面。

skills.shnpx skills
npx skills add https://github.com/emalorenzo/three-agent-skills --skill r3f-best-practices

这个 Skill 是做什么的

开发规范类 Skill 用来统一代码风格、目录结构和评审口径,产出多为检查清单或改写建议。

用于跨 70 多个规则优化 React Three Fiber 和 Poimandres 生态系统代码的综合指南。

涵盖 12 个优先级类别,从性能到重新渲染(关键),再到物理和调试工具,并提供规则前缀以供快速参考 强调避免在 useFrame 中使用 setState、隔离 React 状态、使用 Zustand 选择器以及记住昂贵的组件以防止过度重新渲染 包括具有增量时间的 useFrame 动画模式、Drei 助手(useGLTF、useTexture、环境)、Suspense 加载和后处理效果 提供常见陷阱的代码示例:直接引用突变而不是状态更新、可见性切换而不是重新安装以及连续值的瞬时订阅

来源仓库内路径:skills/r3f-best-practices

上手步骤

4 步
  1. 1

    确认自己的宿主工具

    公开资料标注支持 Codex、Claude、Cursor、Gemini CLI;先确认自己用的是其中之一,再按对应工具的 Skills 目录放置。

  2. 2

    拿到安装命令

    可以直接复制的命令是 npx skills add https://github.com/emalorenzo/three-agent-skills --skill r3f-best…;命令里的占位符换成自己的路径或密钥再执行。

  3. 3

    安装后重启宿主

    命令执行完要完全退出宿主工具再打开,让新装的 Skill 被重新扫描到,否则列表里可能看不到。

  4. 4

    按最小权限试用

    它需要需要联网,先在测试目录或测试账号里跑,确认没问题再放到正式项目。

常见问题

6 条

r3f-best-practices 怎么安装?

在终端执行 npx skills add https://github.com/emalorenzo/three-agent-skills --skill r3f-best-practices。装完完全退出宿主工具再打开,让它重新扫描本地 Skill。

r3f-best-practices 支持哪些 AI 工具?

公开资料标注支持 Codex、Claude、Cursor、Gemini CLI。其他工具只要能读取本地 Skill 目录,一般也能手动放进去,但要自己确认触发方式是否一致。

r3f-best-practices 需要什么权限?

权限级别是需要联网。该 Skill 可能需要联网访问来源站点、仓库或外部 API;具体网络访问范围需要结合源码和 README 复核。

r3f-best-practices 是免费的吗?

来源标注的许可证是 MIT。本站不代收任何费用,也不托管安装包;能否商用、要不要署名,以许可证原文为准。

r3f-best-practices 用的人多吗?

公开数据是累计安装 10,466 次,近一周安装 445 次,下载 3,667 次,GitHub 19 星。这些数字来自第三方目录统计,只能当作热度参考,不代表质量或安全性。

r3f-best-practices 安全吗?

第三方扫描结果为通过,但这只覆盖已知的静态检查项,不能替代自己读一遍源码和安装命令。

值得选的地方和要先想清楚的地方

值得选的地方

  • 同时适配 4 种工具,换客户端不用重新找替代品。
  • 3 个目录同时收录,说明这个 Skill 流传比较广。
  • 许可证明确为 MIT,商用和分发边界好判断。
  • 第三方扫描已通过,常见的高风险行为没有命中。

先想清楚的地方

  • 第三方目录整理,版本更新和行为细节以来源仓库为准。

适不适合你

更适合

  • 已经在用 Codex,想直接扩展它能力的人。
  • 需要处理开发规范类任务、又不想每次都手写提示词的人。
  • 需要许可证清楚、并且有第三方扫描结果的团队项目。

不太适合

  • 需要厂商级技术支持和 SLA 的生产系统。

开发规范类 Skill 对比

6 个同类
Skill总安装GitHub 星权限许可证扫描
vercel-react-best-practices

Vercel React 最佳实践 · Codex、Claude

8,490,72025,918操作浏览器MIT通过
web-design-guidelines

网页设计指南 · Codex、Claude

6,686,01625,885需要联网MIT有提醒
remotion-best-practices

Remotion 最佳实践 · Codex、Claude

6,505,6323,027操作浏览器MIT有提醒
supabase-postgres-best-practices

Supabase Postgres 最佳实践 · Codex、Claude

3,175,5232,030需要联网MIT通过
next-best-practices

Next.js 最佳实践 · Codex、Claude

1,848,240841操作浏览器MIT通过
r3f-best-practices

r3f 最佳实践 · 本页

10,46619需要联网MIT通过

按安装量取同分类前几名;数字来自第三方目录统计,只作热度参考,不代表质量结论。

SKILL.md 原文

React Three Fiber Best Practices

Comprehensive guide for React Three Fiber and the Poimandres ecosystem. Contains 70+ rules across 12 categories, prioritized by impact.

Sources & Credits

Additional tips from 100 Three.js Tips by Utsubo

When to Apply

Reference these guidelines when:

  • Writing new R3F components
  • Optimizing R3F performance (re-renders are the #1 issue)
  • Using Drei helpers correctly
  • Managing state with Zustand
  • Implementing post-processing or physics

Ecosystem Coverage

  • @react-three/fiber - React renderer for Three.js
  • @react-three/drei - Useful helpers and abstractions
  • @react-three/postprocessing - Post-processing effects
  • @react-three/rapier - Physics engine
  • zustand - State management
  • leva - Debug GUI

Rule Categories by Priority

PriorityCategoryImpactPrefix
1Performance & Re-rendersCRITICALperf-
2useFrame & AnimationCRITICALframe-
3Component PatternsHIGHcomponent-
4Canvas & SetupHIGHcanvas-
5Drei HelpersMEDIUM-HIGHdrei-
6Loading & SuspenseMEDIUM-HIGHloading-
7State ManagementMEDIUMstate-
8Events & InteractionMEDIUMevents-
9Post-processingMEDIUMpostpro-
10Physics (Rapier)LOW-MEDIUMphysics-
11Leva (Debug GUI)LOWleva-

Quick Reference

1. Performance & Re-renders (CRITICAL)

  • perf-never-set-state-in-useframe - NEVER call setState in useFrame
  • perf-isolate-state - Isolate components that need React state
  • perf-zustand-selectors - Use Zustand selectors, not entire store
  • perf-transient-subscriptions - Use transient subscriptions for continuous values
  • perf-memo-components - Memoize expensive components
  • perf-keys-for-lists - Use stable keys for dynamic lists
  • perf-avoid-inline-objects - Avoid creating objects/arrays in JSX
  • perf-dispose-auto - Understand R3F auto-dispose behavior
  • perf-visibility-toggle - Toggle visibility instead of remounting
  • perf-r3f-perf - Use r3f-perf for performance monitoring

2. useFrame & Animation (CRITICAL)

  • frame-priority - Use priority for execution order
  • frame-delta-time - Always use delta for animations
  • frame-conditional-subscription - Disable useFrame when not needed
  • frame-destructure-state - Destructure only what you need
  • frame-render-on-demand - Use invalidate() for on-demand rendering
  • frame-avoid-heavy-computation - Move heavy work outside useFrame

3. Component Patterns (HIGH)

  • component-jsx-elements - Use JSX for Three.js objects
  • component-attach-prop - Use attach for non-standard properties
  • component-primitive - Use primitive for existing objects
  • component-extend - Use extend() for custom classes
  • component-forwardref - Use forwardRef for reusable components
  • component-dispose-null - Set dispose={null} on shared resources

4. Canvas & Setup (HIGH)

  • canvas-size-container - Canvas fills parent container
  • canvas-camera-default - Configure camera via prop
  • canvas-gl-config - Configure WebGL context
  • canvas-shadows - Enable shadows at Canvas level
  • canvas-frameloop - Choose appropriate frameloop mode
  • canvas-events - Configure event handling
  • canvas-linear-flat - Use linear/flat for correct colors

5. Drei Helpers (MEDIUM-HIGH)

  • drei-use-gltf - useGLTF with preloading
  • drei-use-texture - useTexture for texture loading
  • drei-environment - Environment for realistic lighting
  • drei-orbit-controls - OrbitControls from Drei
  • drei-html - Html for DOM overlays
  • drei-text - Text for 3D text
  • drei-instances - Instances for optimized instancing
  • drei-use-helper - useHelper for debug visualization
  • drei-bounds - Bounds to fit camera
  • drei-center - Center to center objects
  • drei-float - Float for floating animation

6. Loading & Suspense (MEDIUM-HIGH)

  • loading-suspense - Wrap async components in Suspense
  • loading-preload - Preload assets with useGLTF.preload
  • loading-use-progress - useProgress for loading UI
  • loading-lazy-components - Lazy load heavy components
  • loading-error-boundary - Handle loading errors

7. State Management (MEDIUM)

  • state-zustand-store - Create focused Zustand stores
  • state-avoid-objects-in-store - Be careful with Three.js objects
  • state-subscribeWithSelector - Fine-grained subscriptions
  • state-persist - Persist state when needed
  • state-separate-concerns - Separate stores by concern

8. Events & Interaction (MEDIUM)

  • events-pointer-events - Use pointer events on meshes
  • events-stop-propagation - Prevent event bubbling
  • events-cursor-pointer - Change cursor on hover
  • events-raycast-filter - Filter raycasting
  • events-event-data - Understand event data structure

9. Post-processing (MEDIUM)

  • postpro-effect-composer - Use EffectComposer
  • postpro-common-effects - Common effects reference
  • postpro-selective-bloom - SelectiveBloom for optimized glow
  • postpro-custom-shader - Create custom effects
  • postpro-performance - Optimize post-processing

10. Physics Rapier (LOW-MEDIUM)

  • physics-setup - Basic Rapier setup
  • physics-body-types - dynamic, fixed, kinematic
  • physics-colliders - Choose appropriate colliders
  • physics-events - Handle collision events
  • physics-api-ref - Use ref for physics API
  • physics-performance - Optimize physics

11. Leva (LOW)

  • leva-basic - Basic Leva usage
  • leva-folders - Organize with folders
  • leva-conditional - Hide in production

How to Use

Read individual rule files for detailed explanations and code examples:

rules/perf-never-set-state-in-useframe.md
rules/drei-use-gltf.md
rules/state-zustand-selectors.md

Full Compiled Document

For the complete guide with all rules expanded: ../R3F_BEST_PRACTICES.md

Critical Patterns

NEVER setState in useFrame

// BAD - 60 re-renders per second!
function BadComponent() {
  const [position, setPosition] = useState(0);
  useFrame(() => {
    setPosition(p => p + 0.01); // NEVER DO THIS
  });
  return <mesh position-x={position} />;
}

// GOOD - Mutate refs directly
function GoodComponent() {
  const meshRef = useRef();
  useFrame(() => {
    meshRef.current.position.x += 0.01;
  });
  return <mesh ref={meshRef} />;
}

Zustand Selectors

// BAD - Re-renders on ANY store change
const store = useGameStore();

// GOOD - Only re-renders when playerX changes
const playerX = useGameStore(state => state.playerX);

// BETTER - No re-renders, direct mutation
useFrame(() => {
  const { value } = useStore.getState();
  ref.current.position.x = value;
});

Drei useGLTF

import { useGLTF } from '@react-three/drei';

function Model() {
  const { scene } = useGLTF('/model.glb');
  return <primitive object={scene} />;
}

// Preload for instant loading
useGLTF.preload('/model.glb');

Suspense Loading

function App() {
  return (
    <Canvas>
      <Suspense fallback={<Loader />}>
        <Model />
      </Suspense>
    </Canvas>
  );
}

r3f-perf Monitoring

import { Perf } from 'r3f-perf';

function App() {
  return (
    <Canvas>
      <Perf position="top-left" />
      <Scene />
    </Canvas>
  );
}

Toggle Visibility (Not Remounting)

// BAD: Remounting destroys and recreates
{showModel && <Model />}

// GOOD: Toggle visibility, keeps instance alive
<Model visible={showModel} />

平台分布

Claude Code

30.33%
按下载量换算1,112

Cursor

22.52%
按下载量换算826

OpenCode

17.09%
按下载量换算627

Gemini CLI

14.4%
按下载量换算528

Antigravity

7.63%
按下载量换算280

Codex

3.27%
按下载量换算120

安全审计

Gen Agent Trust Hub

通过

Socket

通过

Snyk

通过

权限和风险

需要联网

该 Skill 可能需要联网访问来源站点、仓库或外部 API;具体网络访问范围需要结合源码和 README 复核。

安装前确认

本站仅展示第三方公开信息,不托管安装包,不提供自动安装或运行环境。安装前应自行审查源码、依赖和命令行为。

继续浏览同类 Skills