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

React03 组件 Props

组件 & Props

  • React 组件
    • 函数( Function )组件
    • 类( Class )组件
  • Props
    • 将 props 传递给子组件
    • 在子组件中读取 props
    • 给 prop 指定一个默认值
    • 使用 JSX 展开语法传递 props

React 组件

组件本质上就是类和函数,但是与常规的类和函数不同的是,组件承载了渲染视图的 UI 和更新视图的 setStateuseState 等方法。React 在底层逻辑上会像正常实例化类和正常执行函数那样处理的组件。

因此,函数与类上的特性在 React 组件上同样具有,比如原型链,继承,静态属性等,所以不要把 React 组件和类与函数独立开来。

函数( Function )组件

接收唯一带有数据的 props 对象与并返回一个 React 元素
函数式组件定义时首字母必须大写
render渲染时必须使用标签

function Welcome(props) {
  return <h1>Hello, {props.name}</h1>;
}

const root = ReactDOM.createRoot(document.getElementById('root'));
const element = <Welcome name="Sara" />;
root.render(element);

类( Class )组件

类组件必须继承React.Component
必须写render函数
必须有返回值

class Welcome extends React.Component {
  render() {
    return <h1>Hello, {this.props.name}</h1>;
  }
}

Props

React 组件使用 props 来互相通信。每个父组件都可以提供 props 给它的子组件,从而将一些信息传递给它。

将 props 传递给子组件

export default function Profile() {
  return (
    <Avatar
      person={{ name: 'Lin Lanying', imageId: '1bX5QH6' }}
      size={100}
    />
  );
}

在子组件中读取 props

function Avatar({ person, size }) {
  // 在这里 person 和 size 是可访问的
}

给 prop 指定一个默认值

function Avatar({ person, size = 100 }) {
  // ...
}

使用 JSX 展开语法传递 props

有时候,传递 props 会变得非常重复:

function Profile({ person, size, isSepia, thickBorder }) {
  return (
    <div className="card">
      <Avatar
        person={person}
        size={size}
        isSepia={isSepia}
        thickBorder={thickBorder}
      />
    </div>
  );
}

重复代码没有错(它可以更清晰)。但有时你可能会重视简洁。一些组件将它们所有的 props 转发给子组件,正如 Profile 转给 Avatar 那样。因为这些组件不直接使用他们本身的任何 props,所以使用更简洁的“展开”语法是有意义的:

function Profile(props) {
  return (
    <div className="card">
      <Avatar {...props} />
    </div>
  );
}

这会将 Profile 的所有 props 转发到 Avatar,而不列出每个名字。


http://www.kler.cn/a/370734.html

相关文章:

  • 迅为RK3576开发板Android 多屏显示
  • 爬虫基础学习
  • 第34天:Web开发-PHP应用鉴别修复AI算法流量检测PHP.INI通用过滤内置函数
  • python-44-嵌入式数据库SQLite和DuckDB
  • 用 Python 自动化处理日常任务
  • RV1126+FFMPEG推流项目(6)视频码率及其码率控制方式
  • 【C++初阶】模版入门看这一篇就够了
  • 华为Atlas显卡服务器查询计算卡型号
  • 如何通过接口版本控制实现向后兼容
  • Spring Boot:植物健康监测的智能专家
  • MATLAB中 exist函数用法
  • 【目标检测01】真实框、预测框、锚框和交并比IoU
  • CSS教程(一)- CSS介绍及使用方式
  • PHP免杀详细讲解PHP免杀详细讲解
  • SpringMVC8-HttpMessageConverter
  • 【30】C++子类相关
  • 大数据日志处理框架ELK方案
  • SpringBoot使用JpaRepository方法命名和@Query查询的一些复杂场景
  • js 简单模拟JSON.stringify 功能
  • 初始JavaEE篇——多线程(4):wait、notify,饿汉模式,懒汉模式,指令重排序
  • [vulnhub]Kioptrix: Level 1.2 (#3)
  • 2024年9月电子学会青少年软件编程Python等级考试(三级)真题试卷
  • 赛博威携手百度智能云,开启数字营销新未来
  • Docker Compose一键部署Spring Boot + Vue项目
  • CSS3新增长度单位
  • 在Ubuntu(Linux)系统下安装Anaconda3