React类组件props的使用(五)

简介: 【8月更文挑战第14天】React类组件props的使用(五)

props的基本使用

react的props的概念和vue的props概念是一样的,都是组件用来接受参数的
我们看下面的示例代码

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <title>hello_react</title>
  </head>
  <body>
    <!-- 准备好一个“容器” -->
    <div id="test"></div>
    <!-- 引入react核心库 -->
    <script type="text/javascript" src="./js/react.development.js"></script>
    <!-- 引入react-dom,用于支持react操作DOM -->
    <script type="text/javascript" src="./js/react-dom.development.js"></script>
    <!-- 引入babel,用于将jsx转为js -->
    <script type="text/javascript" src="./js/babel.min.js"></script>
    <script type="text/babel">
      // 1、创建类组件
      class MyComponent extends React.Component {
   
   
        render() {
   
   
          console.log("MyComponent", this);
          return (
            <ul>
              <li>姓名</li>
              <li>年龄</li>
              <li>性别</li>
            </ul>
          );
        }
      }
      // 渲染组件
      const sex = "女";
      ReactDOM.render(<MyComponent name="小明" age="18" sex={
   
   sex} />, document.getElementById("test"));
    </script>
  </body>
</html>

MyComponent实例的props上有我们通过标签传递的参数值
image.png
那么,要使用这些值,也非常容易了。

<script type="text/babel">
// 1、创建类组件
class MyComponent extends React.Component {
   
   
  render() {
   
   
    const {
   
    name, age, sex } = this.props;
    return (
      <ul>
        <li>姓名:{
   
   name}</li>
        <li>年龄:{
   
   age}</li>
        <li>性别:{
   
   sex}</li>
      </ul>
    );
  }
}
// 渲染组件
const sex = "女";
ReactDOM.render(<MyComponent name="小明" age="18" sex={
   
   sex} />, document.getElementById("test"));
</script>

页面效果:
image.png

批量传递props值

如果我们想大量传递一些props值的时候,很自然能想到这种方式

<script type="text/babel">
  // 1、创建类组件
  class MyComponent extends React.Component {
   
   
    render() {
   
   
      const {
   
    name, age, sex } = this.props;
      return (
        <ul>
          <li>姓名:{
   
   name}</li>
          <li>年龄:{
   
   age}</li>
          <li>性别:{
   
   sex}</li>
        </ul>
      );
    }
  }
  // 渲染组件
  const info = {
   
    name: "小明", age: 18, sex: "女" };
  ReactDOM.render(<MyComponent name={
   
   info.name} age={
   
   info.age} sex={
   
   info.sex} />, document.getElementById("test"));
</script>

这种写法很好理解,但是比较繁琐。react提供一种更简洁的语法糖

 // 渲染组件
const info = {
   
    name: "小明", age: 18, sex: "女" };
ReactDOM.render(<MyComponent {
   
   ...info} />, document.getElementById("test"));

但要注意,{...info}并不是我们ES6所说的拓展运算符,拓展运算符是不能展开对象的,{...info}中的括号是react的变量识别符号,不是一个对象的括号!

props类型限制

如果需要对props进行类型限制,在类组件上直接添加propTypes方法即可。

  MyComponent.propTypes = {
   
   };

如果需要对props进行默认值设置,在类组件上直接添加defaultProps方法即可。

MyComponent.defaultProps = {
   
   };

如果我们使用非脚手架的形式创建项目,还要额外引入一个prop-types.js文件
完整的代码应该长这个样子

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <title>hello_react</title>
  </head>
  <body>
    <!-- 准备好一个“容器” -->
    <div id="test"></div>
    <!-- 引入react核心库 -->
    <script type="text/javascript" src="./js/react.development.js"></script>
    <!-- 引入react-dom,用于支持react操作DOM -->
    <script type="text/javascript" src="./js/react-dom.development.js"></script>
    <!-- 引入babel,用于将jsx转为js -->
    <script type="text/javascript" src="./js/babel.min.js"></script>
    <!-- 引入组件标签类型声明文件 -->
    <script type="text/javascript" src="./js/prop-types.js"></script>
    <script type="text/babel">
      // 1、创建类组件
      class MyComponent extends React.Component {
   
   
        render() {
   
   
          const {
   
    name, age, sex } = this.props;
          return (
            <ul>
              <li>姓名:{
   
   name}</li>
              <li>年龄:{
   
   age}</li>
              <li>性别:{
   
   sex}</li>
            </ul>
          );
        }
      }
      // 对标签属性进行类型。必要性的限制
      MyComponent.propTypes = {
   
   
        name: PropTypes.string.isRequired, // 限制name必传,且为字符串
        sex: PropTypes.string, // 限制sex为字符串
        age: PropTypes.number, // 限制age为数值
        speak: PropTypes.func, // 限制speak为函数(注意,不能写成function)
      };
      // 对标签默认值进行设置
      MyComponent.defaultProps = {
   
   
        sex: "男",
        age: 18,
      };
      // 渲染组件
      const info = {
   
    name: "小明" };
      ReactDOM.render(<MyComponent {
   
   ...info} />, document.getElementById("test"));
    </script>
  </body>
</html>

props的简写方式

给props添加类型限制,我们在组件类上添加了propTypes和defaultProps方法,事实上,我们也可以通过其他方式向类上直接添加属性。
我们先看一个简单的demo

     class People {
   
   
        constructor(sex) {
   
   
          this.sex = sex;
        }
        static age = 19;
      }
      People.hight = "178";
      const xiaoming = new People("女");
      console.log("xiaoming: ", xiaoming);

image.png
通过这个示例,我们可以知道在属性前添加static关键词即可让这个属性只存在类本身。那么,props的简写也显而易见了

<script type="text/babel">
  // 1、创建类组件
  class MyComponent extends React.Component {
   
   
    // 对标签属性进行类型。必要性的限制
    static propTypes = {
   
   
      name: PropTypes.string.isRequired, // 限制name必传,且为字符串
      sex: PropTypes.string, // 限制sex为字符串
      age: PropTypes.number, // 限制age为数值
      speak: PropTypes.func, // 限制speak为函数(注意,不能写成function)
    };
    // 对标签默认值进行设置
    static defaultProps = {
   
   
      sex: "男",
      age: 18,
    };
    render() {
   
   
      const {
   
    name, age, sex } = this.props;
      return (
        <ul>
          <li>姓名:{
   
   name}</li>
          <li>年龄:{
   
   age}</li>
          <li>性别:{
   
   sex}</li>
        </ul>
      );
    }
  }
  // 渲染组件
  const info = {
   
    name: "小明" };
  ReactDOM.render(<MyComponent {
   
   ...info} />, document.getElementById("test"));
</script>
相关文章
|
8天前
|
前端开发 UED 索引
React 图片灯箱组件 Image Lightbox
图片灯箱组件是一种常见的Web交互模式,用户点击缩略图后弹出全屏窗口展示大图,并提供导航功能。本文介绍了基于React框架的图片灯箱组件开发,涵盖初始化状态管理、图片加载与预加载、键盘和鼠标事件处理等常见问题及解决方案。通过`useState`和`useEffect`钩子管理状态,使用懒加载和预加载优化性能,确保流畅的用户体验。代码案例展示了组件的基本功能实现,包括打开/关闭灯箱、切换图片及键盘操作。
105 80
|
7天前
|
移动开发 前端开发 JavaScript
React 视频播放器组件:Video Player
本文介绍了如何使用 React 和 HTML5 `&lt;video&gt;` 标签构建自定义视频播放器组件。首先,通过创建基础的 React 项目和 VideoPlayer 组件,实现了基本的播放、暂停功能。接着,探讨了常见问题如视频加载失败、控制条样式不一致、性能优化不足及状态管理混乱,并提供了相应的解决方案。最后,总结了构建高效视频播放器的关键要点,帮助开发者应对实际开发中的挑战。
52 27
|
10天前
|
前端开发 JavaScript API
React 图片放大组件 Image Zoom
本文介绍如何使用React创建图片放大组件(Image Zoom),提升用户体验。组件通过鼠标悬停或点击触发放大效果,利用`useState`管理状态,CSS实现视觉效果。常见问题包括图片失真、性能下降和移动端支持,分别可通过高质量图片源、优化事件处理和添加触摸事件解决。易错点涉及状态管理混乱、样式冲突和过多事件绑定,建议使用上下文API、CSS模块及优化事件绑定逻辑。高级功能扩展如多张图片支持和自定义放大区域进一步丰富了组件的实用性。
43 25
|
6天前
|
存储 编解码 前端开发
React 视频上传组件 Video Upload
随着互联网的发展,视频内容在网站和应用中愈发重要。本文探讨如何使用React构建高效、可靠的视频上传组件,涵盖基础概念、常见问题及解决方案。通过React的虚拟DOM和组件化开发模式,实现文件选择、进度显示、格式验证等功能,并解决跨域请求、并发上传等易错点。提供完整代码案例,确保用户能顺畅上传视频。
118 92
|
11天前
|
移动开发 前端开发 JavaScript
React 图片裁剪组件 Image Cropper
本文介绍了在React中实现图片裁剪功能的方法,涵盖基础知识、常见问题及解决方案。首先,通过第三方库如`react-image-crop`或`cropperjs-react`可轻松实现图片裁剪。接着,针对性能和兼容性问题,提供了优化图片加载、处理裁剪区域响应慢、解决浏览器差异等方案。最后,通过代码案例详细解释了如何创建一个基本的图片裁剪组件,并提出了优化建议,如使用`React.memo`、添加样式支持及处理大图片预览,帮助开发者避免常见错误并提升用户体验。
94 67
|
16天前
|
前端开发 JavaScript UED
React 拖拽排序组件 Draggable List
在现代Web应用中,拖拽排序功能显著提升用户体验。使用React结合`react-dnd`库,可以轻松创建高效且易于维护的拖拽排序组件。通过简单的拖拽操作,用户能直观调整列表项顺序,适用于任务管理、看板工具等场景。实现步骤包括项目初始化、安装依赖、创建基础组件、添加拖拽功能及管理状态和事件。常见问题如拖拽效果不流畅、顺序未更新等可通过性能优化、正确处理索引交换等方式解决。移动端支持也需考虑,确保跨平台的良好体验。
78 25
|
9天前
|
存储 前端开发 索引
React 图片轮播组件 Image Carousel
本文介绍了如何使用React创建图片轮播组件。首先,解释了图片轮播的基本概念和组件结构,包括图片容器、导航按钮、指示器和自动播放功能。接着,通过代码示例详细说明了创建基本组件、添加自动播放、处理边界情况的步骤。还探讨了常见问题如状态更新不及时、内存泄漏和样式问题,并提供了解决方案。最后,介绍了进阶优化,如添加过渡效果、支持触摸事件和动态加载图片,帮助读者构建更完善的轮播组件。
27 16
|
18天前
|
前端开发 JavaScript UED
React 轮播图组件 Carousel
本文介绍了如何在 React 中实现和优化轮播图组件,涵盖自动播放、手动切换、循环播放和响应式设计等核心功能。通过 `useState` 和 `useEffect` 钩子管理状态和副作用,添加左右箭头和指示器增强交互性。同时,探讨了常见问题如自动播放与手动切换冲突、指示器样式不一致、响应式设计及性能优化,并提供解决方案和代码示例。帮助开发者提升轮播图组件的用户体验。
68 26
|
13天前
|
移动开发 前端开发 数据可视化
React 拖拽布局组件 Drag & Drop Layout
本文介绍了如何在React中构建拖拽布局组件,涵盖基础知识、常见问题及解决方案。首先解释了拖拽操作的三个阶段:开始、过程中和结束。接着推荐了几个常用的拖拽库,如`react-beautiful-dnd`,并详细展示了如何使用该库创建基础拖拽组件,包括安装依赖、初始化容器和处理拖拽结束事件。文章还探讨了常见问题,如拖拽不生效、性能优化、嵌套拖拽和跨浏览器兼容性,并提供了进阶技巧,如自定义样式、多列布局和集成其他UI组件。通过这些内容,读者可以掌握构建高效拖拽布局的方法。
39 16
|
14天前
|
前端开发 安全 UED
React 文件预览组件:File Preview
在现代Web应用中,文件上传和预览功能至关重要。本文基于React库,详细介绍如何构建文件预览组件,涵盖文件选择器、图片预览、文件大小限制及多种文件类型支持。通过实际代码示例,解析常见问题如跨域请求、文件路径处理和状态管理,并提供解决方案。帮助开发者提升用户体验,减少误操作。
32 2