reactjs - 仅当元素位于视口(viewport)上时才调用 UseFrame

标签 reactjs react-hooks react-three-fiber

我正在使用react-三纤维中的react hook“UseFrame”。然而,这个函数在每一帧都会被调用。有没有办法仅当 react 元素位于视口(viewport)内时才调用此回调函数?我应该使用不同的钩子(Hook)吗?我不希望为那些未在屏幕上显示的 react 元素在每一帧调用这个“UseFrame”钩子(Hook)。

最佳答案

您可以将 useFrame Hook 包装在它自己的组件中,然后仅当 Canvas 位于视口(viewport)内时才渲染该组件,如下所示:

import { Canvas, useFrame } from "@react-three/fiber";
import { useInView } from "react-intersection-observer";

function DisableRender() {
  useFrame(() => null, 1000);
}

function App() {
  const { ref, inView } = useInView();
  return (
    <div ref={ref} className="canvasContainer">
      <Canvas>{!inView && <DisableRender />}</Canvas>
    </div>
  );
}

关于reactjs - 仅当元素位于视口(viewport)上时才调用 UseFrame,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70895217/

相关文章:

reactjs - React Router v4 - 具有更改的默认路由的动态配置

reactjs - 使用 useReducer 函数 Hook 更新状态的最佳方法是什么?

typescript - 在 react 三纤维中四处移动正交相机

javascript - 如何在 React 中更改 OrbitControl 目标?

reactjs - React - 获取功能组件中的组件名称

c# - React + ASP.Net-Core CORS 问题

reactjs - 使用 useCallback 记住切换函数是否有意义?

reactjs - MUI Material UI React Hook useTheme() 是遗留的,有什么替代方案?

javascript - react-three-fiber 多重网格丢失模型,除了最后一个

javascript - React/Router/MemoryRouter - 如何传递历史属性并在子组件中使用 push()?