javascript - 在 React 中将功能组件转换为类组件
问题描述
我有一个应用程序正在使用类组件进行响应,我找到了一个我想添加到我的代码中的功能代码,但它是使用功能组件制作的。代码在这里https://codesandbox.io/s/framer-motion-animate-in-view-gqcc8但相关部分是这个。
import { useInView } from "react-intersection-observer";
import { motion, useAnimation } from "framer-motion";
import "./styles.css";
function Box() {
const controls = useAnimation();
const [ref, inView] = useInView();
useEffect(() => {
if (inView) {
controls.start("visible");
}
}, [controls, inView]);
我不知道如何在我的类组件中添加该控件变量
class App extends Component {
constructor(props) {
super(props);
this.state = {
curtains: null,
loading: true,
renderNav: false
};
}
我应该将它添加到我的状态吗?我不明白如何使它在类组件中工作
解决方案
您不能在类组件内使用钩子。您可以做的是编写一个小包装器,将ref
and暴露controls
在渲染道具中:
const Controls = ({children}) => {
const controls = useAnimation();
const [ref, inView] = useInView();
useEffect(() => {
if (inView) {
controls.start("visible");
}
}, [controls, inView]);
return children(ref, controls);
};
然后你可以像这样使用它:
class App extends Component {
// ...
render() {
return (
<Controls>
{(ref, controls) => (
<motion.div ref={ref} animate={controls}>
{/* content */}
</motion.div>
)}
</Controls>
);
}
}
推荐阅读
- laravel-8 - Laravel Livewire 中是否有允许将 html 元素的 value 属性传递给函数的函数?
- android - 如何打开另一个活动并更改位于该活动中的 Web 视图的 URL
- wordpress - 如何将 Gutenberg 块调用到页面模板中
- php - Docusign API:上线,然后测试,重新上线?
- android - 如何使用 rememberLauncherForActivityResult() 裁剪图像
- reactjs - React 捕获所有路由,但将确切的路由传递给子组件
- python - 如何从使用 Google 表格作为数据库过渡?(需要非技术人员手动更新)
- flutter - 从类中监听 ValueNotifier
- python - 在 DJango 中获取对象而不是所需的属性
- reactjs - 为什么我会收到“React:未终止的 JSX 内容”?