当前位置: 首页 > news >正文

【react】类组件和函数组件的区别

目录

类组件和函数组件的区别

1. 定义方式

2. 状态管理

3. 生命周期方法

4. 性能优化

5. 语法简洁性

6. Hooks 的使用

总结


函数组件和类组件是 React 中两种主要的组件形式

类组件和函数组件的区别

1. 定义方式

函数组件:使用函数定义,通常以 constfunction 开头。

const MyFunctionComponent = (props) => {
  return <div>{props.message}</div>;
};

类组件:使用 ES6 类定义,继承自 React.Component

class MyClassComponent extends React.Component {
  render() {
    return <div>{this.props.message}</div>;
  }
}

2. 状态管理

函数组件

在 React Hooks 出现之前,函数组件是无状态的,不能直接管理状态。但现在可以通过 useState Hook 管理状态。

类组件

类组件可以有自己的状态,通过 this.state 来管理。

class MyClassComponent extends React.Component {
  constructor(props) {
    super(props);
    this.state = { count: 0 };
  }
  render() {
    return <div>Count: {this.state.count}</div>;
  }
}

3. 生命周期方法

函数组件:没有生命周期方法,但现在可以通过 useEffect Hook 来实现类似的功能。

const MyFunctionComponent = () => {
  useEffect(() => {
    console.log('Component mounted');
    return () => console.log('Component unmounted');
  }, []);
  return <div>My Function Component</div>;
};

类组件:有完整的生命周期方法,如 componentDidMountcomponentDidUpdatecomponentWillUnmount 等。

class MyClassComponent extends React.Component {
  componentDidMount() {
    console.log('Component mounted');
  }
  componentWillUnmount() {
    console.log('Component unmounted');
  }
  render() {
    return <div>My Class Component</div>;
  }
}

//函数组件
const MyFunctionComponent = (props) => {
  const [state, setState] = useState({
    loading:true,
    data: [],
    model:props.model || '',
  });

//类组件
class MyFunctionComponent extends React.Component {
  constructor(props) {
    super(props);
    this.state = {
      loading: true,
      model: props.model || '',
  }
 }

//函数组件
  useEffect(() => {
    if (props.model) {
      setState((prevState) => ({
        ...prevState,
        model: props.model,
      }));
    }
    sync();
  }, [props.model, props.data]);

  const sync = () => {
    const { data } = props;
    const wrappedData = wrapDataNew(data);
    setState((prevState) => ({
      ...prevState,
      loading: false,
      ...wrappedData,
    }));
  };
//类组件
  componentDidMount() {
    const { model } = this.props;
    if (model) this.setState({ model });
    this.sync();
  }
 sync = () => {
    const { data } = this.props;
    let wrappedData = this.wrapDataNew(data);
    this.setState({ loading: false, ...wrappedData });
  };


render(){
 return
}
  
};

 以上为举例区别函数组件和类组件的写作方式,实际无意义 

4. 性能优化

函数组件

可以使用 React.memo 进行性能优化,避免不必要的重渲染。

const MyFunctionComponent = React.memo((props) => {
  return <div>{props.value}</div>;
});
类组件

可以使用 shouldComponentUpdate 方法来控制组件是否更新。

class MyClassComponent extends React.Component {
  shouldComponentUpdate(nextProps, nextState) {
    return nextProps.value !== this.props.value;
  }
  render() {
    return <div>{this.props.value}</div>;
  }
}

5. 语法简洁性

函数组件:语法更简洁,尤其是使用 Hooks 后,代码更易于阅读和维护。

类组件:语法相对复杂,需要更多的样板代码。

6. Hooks 的使用

函数组件:可以使用 Hooks 来管理状态和副作用,使函数组件的功能更强大。

类组件:不能使用 Hooks,因为 Hooks 是为函数组件设计的。

总结

函数组件:语法简洁,适合大多数场景,尤其是使用 Hooks 后,功能已经非常强大。

类组件:适合需要复杂生命周期管理的场景,但在新项目中逐渐被函数组件和 Hooks 替代。

在实际开发中,建议优先使用函数组件和 Hooks,因为它们更简洁且功能强大。类组件仍然在一些特定场景下有用,但新功能开发通常推荐使用函数组件

码字不易,各位大佬点点赞呗

相关文章:

  • Xshell能连接远程服务器,vscode连接远程服务器一直让输入密码,连不上
  • 炫酷的3D卡片翻转画廊实现教程
  • b站视频提取mp4方案
  • Vue3中keep-alive缓存组件应用场景。
  • HarmonyOS Next~鸿蒙系统开发类Kit深度解析与应用实践
  • C++11QT复习 (四)
  • Linux上位机开发实践(积极使用SoC厂家的SDK)
  • Linux系统perf命令使用介绍,如何用此命令进行程序热点诊断和性能优化
  • 信息安全的数学本质与工程实践
  • 【算法工程】RAG:针对linux下文档解析出现乱码问题的解决
  • package.json版本前缀
  • 【Python 代码进阶-2】Python 中的 **(...)语法,字典解包操作符
  • 虫洞数观系列一 | 豆瓣电影TOP250数据采集与MySQL存储实战
  • 阿里巴巴1688类网站高保真原型设计
  • 国产化适配 - YashanDB、达梦数据库与MySQL 的兼容性及技术选型对比分析
  • 重学vue3(三):vue3基本语法及使用
  • AI驱动下的智能异常处置:海量多元异构数据的挑战与应对
  • 二分查找(二分答案)套路模板
  • JavaScript 改变 HTML 样式
  • 给Web开发者的HarmonyOS指南01-文本样式
  • 新经济与法|如何治理网购刷单与控评?数据合规管理是关键
  • 影子调查丨危房之下,百余住户搬离梦嘉商贸楼
  • 全过程人民民主研究基地揭牌,为推动我国民主政治建设贡献上海智慧
  • 伊朗外长:美伊谈判进展良好,讨论了很多技术细节
  • 以军称若停火谈判无进展,将大幅扩大加沙军事行动
  • 在县中,我看到“走出去”的渴望与“留下来”的惯性