当前位置: 首页 > 知识库问答 >
问题:

在React中将功能组件转换为类组件

贾建茗
2023-03-14

我有一个应用程序正在使用类组件开发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
    };
  }

我应该把它添加到我的州吗?我不明白如何让它在类组件中工作

共有3个答案

翟沈义
2023-03-14

您还可以在任何地方使用功能组件,如类组件。顺便说一句,它也在使用状态,所以不需要担心不能在其中使用状态的事情。

使用:

<Box props={props}/>
马欣荣
2023-03-14

假设你有

const functionalComponent=()=>{
  return <h1>Functional componenet</h1>
}

您想将其更改为类组件

在顶部使用此导入:

import React,{Component} from "react";

并将代码更改为这样的内容:

    Class functionalComponent extends Component{
       state={}
       render(){
           return <h1>functional component</h1>;
         }
    }

您的功能组件现在更改为类组件。

要在现有的类组件中使用它,您不需要将功能组件更改为类组件,除非您需要本地状态。

随着react钩子的引入,这个钩子也发生了变化,也就是说,如果您计划使用钩子,您不必将功能组件更改为类组件。

在代码中:useffect是一个钩子,不能在类组件中使用它。

我建议简单地在类组件中导入函数组件,如果必须传递一些值,可以将其作为道具传递。

就导入功能组件而言:

import React,{Component} from "react";
import Box from "./Box.js";

class App extends Component {
  constructor(props) {
    super(props);

    this.state = {
      curtains: null,
      loading: true,
      renderNav: false
    };
  render(){
  return(<Box/>);
  }
  }
秦育
2023-03-14

不能在类组件内部使用挂钩。您可以编写一个小包装器,在渲染道具中公开ref控件

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>
        );
    }
}
 类似资料:
  • 我有以下react功能组件来帮助支持react路由器所需的身份验证路由。 我需要将其从功能组件转换为类组件,以便利用React.component的componentDidMount方法。不幸的是,我很难弄清楚如何迁移它。如果我照原样做,我需要复制组件和…rest参数,但我不知道怎么做。我想我可以用这个.props.Component获得组件参数,但我不确定如何拉…rest。我是JSX和ES6的新

  • 我试图将我的类组件转换为功能组件,但我的过滤器不再工作了。 主要的错误是当我想转换listProducts因为我不知道如何定义与useState为这种情况下的preState 如何能为情况更新状态? 这是我的密码 类组件 功能成分

  • 我想将web设计师用纯HTML编写的复杂div容器转换为React组件。此div容器具有React to manage的状态。我知道我可以将div转换为JSX,但这意味着设计师和我都要加倍努力。危险的是,Html不处理状态。我可以创建React的子类。组件,定义状态并在不使用JSX的情况下将状态值呈现到div容器中? 下面是div容器标记的一个片段:

  • 问题内容: 我尝试将函数传递给子组件。当用户单击每个子组件时,将调用onclick函数。此onclick函数将写入父组件。 父组件: 子组件: 在这一行: 它说没有定义handleClick …如何解决这个问题? 感谢您的回答。 问题答案: 您需要将Agents绑定到AgentsList:这是您的代码的一个简单示例,我不得不删除一些东西,但是您明白了: http://jsfiddle.net/vh

  • 我是ReactJS的初学者,我正在将类组件转换为函数式组件。 虽然这是一种不推荐使用的生命周期方法,但我想知道如何在功能组件中重写它。提前谢谢

  • 我有下面的类组件- https://pastebin.com/WigZksAq 我想将面板移动到单独的文件中- 但是我不明白如何修改主类组件的状态。