react 组件之组件的属性

简介: react 组件分为两种组件(由于本人会ts(typescript),所以后面的列子都是基于typescript来进行组件编写)

含义: 组件是包含内容(html),样式(css)和功能(js)的ui单元


分类


react 组件分为两种组件(由于本人会ts(typescript),所以后面的列子都是基于typescript来进行组件编写)


  • 函数式组件
  • 类组件


函数式组件


返回一个React元素


代码格式例如:


import React from 'react'
export default function MyFuncComp() {
  return (
    <div>
      我是函数式组件,// 这里面需要可以写该组件对于的css, js 和 html等,但是建议使用jsx
    </div>
  )
}


使用方式:


在需要使用的地方,import 该组件,然后在对应的位置中使用即可,但是这里有两种使用方式:


  • 直接函数使用:


20210212094154606.png


  • 通过组件的方式使用:


20210212094305645.png


效果


20210212094337884.png


类组件


必须继承React.Component


必须提供render函数,用于渲染组件


样例:


import React, { Component } from 'react'
export default class MyClassComp extends Component {
  render() {
    return (
      <div>
        我是类组件
      </div>
    )
  }
}


使用方式


和上面的函数式组件一样的,都是两种方式


注意事项:


  • react 组件导出的函数式组件或者类组件命名必须大写(大驼峰命名),原因,我们在使用组件的时候,如果使用标签的方式来进行使用,如果不是大驼峰的方式命名的话,在使用用会报错:


20210212095732802.png

20210212095924150.png


  • 使用组件的方式,尽量使用 标签的方式,原因: 使用标签的方式方便 react devtools 来进行调试,如:


20210212101702859.png

2021021210163826.png


函数调用方式:


20210212101809378.png

20210212101917925.png


组件传参


函数组件


对于函数组件,属性会作为一个对象的属性,传递给函数的第一个参数


样例:


// MyFuncComp.tsx 组件内容
import React from 'react'
interface MyFuncCompProps{
  // 测试数据
  num: number
}
export default function MyFuncComp(props:MyFuncCompProps) {
  return (
    <div>
      我是函数式组件,传递的数字{props.num}
    </div>
  )
}
// main.tsx 中调用
import React from 'react'
import ReactDOM from 'react-dom'
import MyFuncComp from './pro/comp/MyFuncComp'
ReactDOM.render(
  <div>
     <MyFuncComp num={1} /> // 可以多次调用达到复用
     <MyFuncComp num={2} /> // 进行传参
  </div>
 ,
  document.getElementById('root')
)


效果:


20210212103237726.png


类组件


对于类组件,属性会作为一个对象的属性,传递给构造函数的参数,(这一步操作,react 会默认自动完成)


样例


// MyClassComp.tsx 文件内容
import React, { Component } from 'react'
interface MyFuncCompProps {
  // 测试数据
  num: number
}
export default class MyClassComp extends Component<MyFuncCompProps> { // MyFuncCompProps 这个地方对组件属性进行限制
  render() {
    return (
      <div>
        我是类组件,传过来的数字是:{this.props.num}
      </div>
    )
  }
}
// main.tsx 中调用
import React from 'react'
import ReactDOM from 'react-dom'
import MyClassComp from './pro/comp/MyClassComp'
ReactDOM.render(
  <div>
     <MyClassComp num={1} /> //多次调用
     <MyClassComp num={2} /> // 传参方式是一样,参数的类型可以是任意的,只要接口约定好就行
  </div>
 ,
  document.getElementById('root')
)


效果


20210212105258176.png


注意:组件的属性,传递的参数应该使用``小驼峰命名法,参数理论上可以是任何值,包括react 创建的虚拟dom


组件无法改变自身的属性。


之前学习的React元素,div、li 基本上的html标签,本质上,就是一个组件(内置组件)


React中的哲学:数据属于谁,谁才有权力改动


React中的数据,自顶而下流动, 单向数据流


组件传递一个jsx 对象


通过上面我们知道了,组件可以传递任意的参数,但是如果我想在组件里面传递一个jsx对象呢?


两种方式:


第一种是直接通过属性的方式来进行传递,


例如:


import React, { Component } from 'react'
interface MyFuncCompProps {
  // 测试数据
  html: JSX.Element
}
export default class MyClassComp extends Component<MyFuncCompProps> {
  render() {
    return (
      <div>
        我是类组件,传过内容是:
        {this.props.html}
      </div>
    )
  }
}
// main.tsx 中调用
import React from 'react'
import ReactDOM from 'react-dom'
import MyClassComp from './pro/compProp/MyClassComp'
ReactDOM.render(
  <div>
     <MyClassComp html={<h1> 第一个标签</h1>} /> 
     <MyClassComp html={<h2> 第二个标签</h2>} /> 
  </div>
 ,
  document.getElementById('root'))


效果:


20210222105720160.png


第二种是直接通过子标签的形式


20210222110209474.png

20210222110234554.png


结果:


20210222110301813.png


> 如果是单个子节点可以使用自带的children语法糖,如果是多个,还是需要使用属性的方式来进行传参。

相关文章
|
9天前
|
前端开发 UED 开发者
React 悬浮按钮组件 FloatingActionButton
悬浮按钮(FAB)是常见的UI元素,用于提供突出的操作。本文介绍如何在React中使用Material-UI创建美观的FAB组件,涵盖基本概念、实现方法及常见问题解决。通过代码示例和优化技巧,帮助开发者提升用户体验,确保按钮位置、颜色、交互反馈等方面的表现,同时避免无障碍性和性能问题。
107 80
|
17天前
|
前端开发 JavaScript 开发者
React 按钮组件 Button
本文介绍了 React 中按钮组件的基础概念,包括基本的 `&lt;button&gt;` 元素和自定义组件。详细探讨了事件处理、参数传递、状态管理、样式设置和可访问性优化等常见问题及其解决方案,并提供了代码示例。帮助开发者避免易错点,提升按钮组件的使用体验。
148 77
|
14天前
|
存储 前端开发 UED
React 面包屑组件 Breadcrumb 详解
面包屑导航是现代Web应用中常见的UI元素,帮助用户了解当前位置并快速返回上级页面。本文介绍如何使用React构建面包屑组件,涵盖基本概念、实现方法及常见问题。通过函数式组件和钩子,结合React Router动态生成路径,处理嵌套路由,并确保可访问性。示例代码展示了静态和动态面包屑的实现,帮助开发者提升用户体验。
120 73
|
2月前
|
前端开发 JavaScript 测试技术
React 分页组件 Pagination
本文介绍了如何在 React 中从零构建分页组件,涵盖基础概念、常见问题及解决方案。通过示例代码详细讲解了分页按钮的创建、分页按钮过多、初始加载慢、状态管理混乱等常见问题的解决方法,以及如何避免边界条件、性能优化和用户反馈等方面的易错点。旨在帮助开发者更好地理解和掌握 React 分页组件的开发技巧,提升应用的性能和用户体验。
81 0
|
18天前
|
前端开发 UED 开发者
React 对话框组件 Dialog
本文详细介绍了如何在 React 中实现一个功能完备的对话框组件(Dialog),包括基本用法、常见问题及其解决方案,并通过代码案例进行说明。从安装依赖到创建组件、添加样式,再到解决关闭按钮失效、背景点击无效、键盘导航等问题,最后还介绍了如何添加动画效果和处理异步关闭操作。希望本文能帮助你在实际开发中更高效地使用 React 对话框组件。
126 75
|
2月前
|
设计模式 前端开发 编译器
与普通组件相比,React 泛型组件有哪些优势?
与普通组件相比,React 泛型组件有哪些优势?
104 63
|
23天前
|
前端开发 Java API
React 进度条组件 ProgressBar 详解
本文介绍了如何在 React 中创建进度条组件,从基础实现到常见问题及解决方案,包括动态更新、状态管理、性能优化、高级动画效果和响应式设计等方面,帮助开发者构建高效且用户体验良好的进度条。
45 18
|
2月前
|
存储 前端开发 测试技术
React组件的最佳实践
React组件的最佳实践
|
2月前
|
前端开发 API 开发者
React 文件上传组件 File Upload
本文详细介绍了如何在 React 中实现文件上传组件,从基础的文件选择和上传到服务器,再到解决文件大小、类型限制、并发上传等问题,以及实现多文件上传、断点续传和文件预览等高级功能,帮助开发者高效构建可靠的应用。
64 12
|
1月前
|
存储 前端开发 JavaScript
React 表单输入组件 Input:常见问题、易错点及解决方案
本文介绍了在 React 中使用表单输入组件 `Input` 的基础概念,包括受控组件与非受控组件的区别及其优势。通过具体代码案例,详细探讨了创建受控组件、处理多个输入字段、输入验证和格式化的方法,并指出了常见易错点及避免方法,旨在提升表单的健壮性和用户体验。
38 4