React.FC介绍

React.FC是React中的一种函数组件类型,是在TypeScript中使用的一个泛型,FC即Function Component的缩写,表示一个接收props作为输入并返回JSX元素的函数组件。

使用React.FC可以为组件定义类型,提供props的类型作为泛型参数,享受TypeScript的类型检查和自动补全等特性。同时,React.FC也明确了组件的返回类型,其返回类型被限定为React元素(JSX.Element)或null。

下面是一个简单的例子:

复制代码
import React from 'react';  
  
interface MyProps {  
  name: string;  
  age: number;  
}  
  
const MyComponent: React.FC<MyProps> = ({ name, age }) => {  
  return (  
    <div>  
      <h1>Hello, {name}!</h1>  
      <p>You are {age} years old.</p>  
    </div>  
  );  
};  
  
export default MyComponent;

在这个例子中,我们定义了一个名为 MyComponent 的函数组件,它接受一个 MyProps 类型的 props。MyProps 接口定义了 name 和 age 两个属性,它们的类型分别是 string 和 number。

与React.Component(类组件)相比,React.FC(函数式组件)是一个纯函数,不能使用setState,而是使用useState()、useEffect等Hook API。函数式组件也称为无状态组件,它包含了PropsWithChildren的泛型,不需要显式地声明props.children的类型。

简单实现页面数字1秒后加1:

复制代码
import React, { useState, useEffect } from 'react';  
 
const App: React.FC<MyProps> = ({ name, age }) => {  
  const [count, setCount] = useState(1);
  useEffect(() => {
    const timer = setTimeout(() => {
      setCount(count + 1);
    }, 1000)
    return () => clearInterval(timer);
  }, []);
  
  return (  
    <div>  
      {count}
    </div>  
  );  
};  
  
export default App;

useEffect相当于componentDidMount、componentDidUpdate和componentWillUnmount的组合体,可以在函数组建中替代生命周期。

1.传递一个空数组作为第二个参数,这个 Effect 将永远不会重复执行,可以替代componentDidMount。

复制代码
useEffect(() => {
  console.log('componentDidMount');
}, []);

2.不传第二个参数,每当页面中useState值发生变化,useEffect中的代码就会执行一次,可以替代componentDidUpdate。

复制代码
useEffect(() => {
  console.log('componentDidUpdate');
});

3.useEffect可以返回一个函数,该函数将在组件被卸载时的执行,可以替代componentWillUnmount。

复制代码
useEffect(() => {
  return () => {
  	console.log('componentWillUnmount');
  };
});
相关推荐
C_心欲无痕15 小时前
理解前端的运行时与编译时
前端
JosieBook15 小时前
【Vue】10 Vue技术——Vue 中的数据代理详解
javascript·vue.js·ecmascript
38242782715 小时前
JS正则表达式实战:核心语法解析
开发语言·前端·javascript·python·html
一只小阿乐15 小时前
vue-web端网站 滑动进行分页
前端·javascript·vue.js·vue·分页
零度@15 小时前
2026 轻量级消息队列 Redis Stream
前端·redis·bootstrap
旭日猎鹰15 小时前
鸿蒙环境添加React Native的bundle包
react native·react.js·harmonyos
梁山好汉(Ls_man)15 小时前
JS_使用脚本填充基于Vue的用户名密码输入框并触发登录
javascript·elementui·vue
大飞哥~BigFei15 小时前
新版chrome浏览器安全限制及解决办法
java·前端·chrome·安全·跨域
hepingfly15 小时前
SEO 如何寻找关键词?
前端
IT_陈寒15 小时前
SpringBoot 3.2实战:5个性能优化技巧让你的应用提速50%
前端·人工智能·后端