首页 > 其他分享 >React 组件之属性

React 组件之属性

时间:2023-11-27 16:22:22浏览次数:30  
标签:Navbar React props 组件 kvTypes 属性

如果你想要实现自己的梦想,就必须先拥有勇气去追求它。

1. React Props

属性 props 主要解决两个问题:复用性问题以及可以让组件之间通信。

属性 props 正常是外部传入的,组件内部也可以通过一些方式来初始化的设置,属性不能被组件自己更改(属性是描述性质、特点的,组件自己不能随意更改),但是你可以通过父组件主动重新渲染的方式来传入新的 props。

工程组件代码里面有 props 的简单使用,总的来说,在使用一个组件的时候,可以把参数放在标签的属性当中,所有的属性都会作为组件 props 对象的键值。通过箭头函数创建的组件,需要通过函数的参数(形参)来接收 props:

(1) 在组件上通过 key=value 写属性,通过 this.props 获取属性,这样组件的可复用性提高了。

(2)注意在传参数时候,如果写成 isShow="'true" 那么这是一个字符串,如果写成 isShow={true} 这个是布尔值。

(3)对象传递可以通过 {...对象} 展开赋值,后面也可以加其它属性。

2. 属性默认值

2.1)类组件

类组件使用 defaultProps 给组件设置属性默认值。

// Navbar 自定义组件
// 默认属性值定义方法一:组件外部定义 - 不推荐
Navbar.defaultProps = {
  title: "默认标题"
}

// 默认属性值定义方法二:组件内部定义
static defaultProps = {
  title: "默认标题"
}

2.2)函数式组件

函数式组件直接使用函数参数默认值来设置 props 默认值。也可以通过 Navbar.defaultProps 来设置默认值,不推荐。

3. 属性类型验证

3.1)不做验证

直接通过 this.props 获取属性,不做任何验证。

3.2)prop-types

prop-types 是一个 React 属性校验库,使用如下:

import React, { Component } from 'react'
import kvTypes from 'prop-types'

// 状态只能内部自己使用,不能进行传递。属性是父组件传递过来的,this.props。
export default class Navbar extends Component {

  // 类属性定义方法二、类型验证
  static propTypes = {
    title: kvTypes.string,
    showLeft: kvTypes.bool,
    showRight: kvTypes.bool
  }

  render() {
    // 属性解构
    let { title, showLeft, showRight } = this.props
    return (
      <div>
        { showLeft && <button>返回</button> }
        navbar-{title}
        { showRight && <button>搜索</button> }
      </div>
    )
  }
}

// 类属性定义方法一、类型验证
// Navbar.propTypes = {
//   title: kvTypes.string,
//   showLeft: kvTypes.bool,
//   showRight: kvTypes.bool
// }

4. 函数式组件 Props

函数式组件 Props 是直接通过形式参数进行数据传递。参数验证和默认值只能通过 Navbar.propTypes 和 Navbar.defaultProps 设置。

import React from 'react'

export default function Slidbar(props) {
  return (
    <div>Slidbar</div>
  )
}

5. 插槽 slot

插槽(slot)是属性中的特殊属性,写法固定,能够在组件构建的时候向组件模版定义好的位置插入自定义的结构。插槽的作用可以总结为以下两点:

  • 能够使组件得到更好的复用;
  • 在一定程度减少父子通信;
import React, { Component } from 'react'

class Child extends Component {
  render() {
    return (
      <div>
        Child
        {/* 插槽 vue 叫 slot 属性中的特殊属性 */}
        { this.props.children[2]}
      </div>
    )
  }
}

export default class App extends Component {
  render() {
    return (
      <div>
        <Child>
          {/* 这里 div 中的内容是不会展示的,App 在渲染的时候,解析到 Child 组件的时候,
              Child 定义模版(上面定义)会替换掉下面构建的 Child 组件,这里加的 div 是不会被包裹显示的。 
              */}
          {/* 这里定义的结构会被挂到一个特别的属性上面:children  */}
          <div>组件中写内容1</div>
          <div>组件中写内容2</div>
          <div>组件中写内容3</div>
        </Child>
      </div>
    )
  }
}

标签:Navbar,React,props,组件,kvTypes,属性
From: https://www.cnblogs.com/hubert-style/p/17859638.html

相关文章

  • Vue中自定义组件监听事件传参
    自定义数字框组件如下<template><divclass="count-box"><button@click="handleSub"class="minus">-</button><input:value="value"@change="handleChange"class="inp"typ......
  • opencv笔记 - 获取图像属性
    学习链接:https://www.bilibili.com/video/BV1De411R77P/?p=6&vd_source=441ed12ec48d03afe294e7c5f663a0d3获取图像属性主要介绍三个属性:形状属性:行、列、通道数像素数目属性图像的数据类型属性形状属性shapeshape可以获取图像的形状,返回包含行数,列数,通道数的元组.灰度图像:返回行数......
  • vue2跨级组件传值
    //祖先组件importSonfrom'./Son'exportdefault{components:{Son},provide(){return{money:1000000000}}}子孙组件<template> <div>  孙子组件  <p>这个是爷爷传给我的钱:{{money}}</p> </div&......
  • vue2兄弟组件传值
    //1创建一个公共的vue实例(bus)importVuefrom'vue'constbus=newVue()exportdefaultbus<!-- brother1--><template> <div>  兄弟1组件  <p>   <button@click="send">传值给兄弟2</button>  </p&......
  • Linux学习记录:Vim编译器和文件一些简单属性
    1.Vi编辑器是Linux上最基本的文本编辑器,工作在字符模式下,效率非常高。Vim是Vi的增强版,这个编译器的功能广泛。 Vim编译器主要有三种模式:编辑模式、命令模式、末行模式(拓展命令模式)。命令模式:控制光标,对文件进行复制、粘贴、删除、查询等操作。编辑模式:进行文本录入和更改。......
  • 高级前端开发工程师必备:Hooks、React Router v6 和状态管理
    点击下方“前端开发博客”,关注并“设为星标”大家好,我是漫步最近一个大佬的简历这样子写的,“可以熟练利用react全家桶进行开发。对ahooks部分源码阅读,加深对hooks的基本使用及其内部的实现原理有了深层次的理解;阅读过react-rouerv6的源码,进行过技术分享;对技术选型(redux、......
  • day05 K8S网络组件的深度剖析 (1.10.1 -1.10.3)
    一、K8S网络组件的深度剖析上1、认识FlannelFlannel是专为kubernetes定制的三层网络解决方案,主要用于解决容器的跨主机通信问题优势:kubernetes发行版都可以默认安装Flannel容器安装和配置中小型网络架构首选不需要专用的数据存储劣势:性能损耗高不支持NetworkPolic......
  • 再学Blazor——组件建造者
    使用RenderTreeBuilder创建组件是Blazor的一种高级方案。前几篇文中有这样创建组件的示例builder.Component<MyComponent>().Build();,本文主要介绍该高级方案的具体实现,我们采用测试驱动开发(TDD)方法,大致思路如下:从测试示例入手扩展一个RenderTreeBuilder类的泛型扩展方法......
  • 15、SpringMVC之常用组件及执行流程
    15.1、常用组件15.1.1、DispatcherServletDispatcherServlet是前端控制器,由框架提供,不需要工程师开发;作用:统一处理请求和响应,整个流程控制的中心,由它调用其它组件处理用户的请求。15.1.2、HandlerMappingHandlerMapping是处理器映射器,由框架提供,不需要工程师开发;......
  • vue 根据js的变量来设置css 里面的属性的属性值
    1.通过动态绑定style,声明css变量"--fontColor",把变量”fontColor”赋给“--fontColor”2.在css中使用var函数读取“--fontColor”变量点击查看代码<template><divclass="wen_style":style="{'--fontColor':fontColor}">当前字体的颜色......