首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何访问react-three-fiber中的控件实例?

如何访问react-three-fiber中的控件实例?
EN

Stack Overflow用户
提问于 2021-01-11 20:40:56
回答 1查看 492关注 0票数 0

有没有办法在react-three-fiber中访问场景的controls实例

我知道可以使用下面这样的引用来访问它:

代码语言:javascript
复制
import { useFrame } from 'react-three-fiber'

const controls = useRef()
useFrame(state => controls.current.update())
return <orbitControls ref={controls} />

但我正在寻找一种全球访问方式,比如:

代码语言:javascript
复制
    const { 
        gl,         // WebGL renderer
        scene,      // Default scene
        camera,     // Default camera
    } = useThree()
EN

回答 1

Stack Overflow用户

发布于 2021-01-11 21:28:18

我不认为你可以开箱即用。

实现类似useThree示例的一种方法是将控件ref存储在上下文中,然后您应该能够在组件树的任何后代中使用它来消费该上下文。

例如(请记住,我没有测试这段代码):

代码语言:javascript
复制
const ControlsContext = createContext()

const ControlsContainer = ({ children }) => {
  const controls = useRef()
  return (
    <ControlsContext.Provider value={{ controls: controls.current }}>
      <orbitControls ref={controls} />
      {children}
    </ControlsContext.Provider>
  )
}

const YourComponent = () => {
  const { controls } = useContext(ControlsContext)
  // do whatever you need, but remember to check if it's defined
}

const App = () => (
  <ControlsContainer>
    <YourComponent />
  </ControlsContainer>
)

然而,我不认为这是一个好的实践。您可能希望将所有控制器代码放在一个组件中。如果你需要将它共享给另一个组件,你可以简单地在一个道具中传递它。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65667075

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档