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

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>
)
}
}

React 组件之属性的更多相关文章

  1. React组件三大属性之 refs

    React组件三大属性之 refs refs属性 1) 组件内的标签都可以定义ref属性来标识自己 a. <input type="text" ref={input => ...

  2. React组件三大属性之 props

    React组件三大属性之 props 理解1) 每个组件对象都会有props(properties的简写)属性2) 组件标签的所有属性都保存在props中 作用1) 通过标签属性从组件外向组件内传递变 ...

  3. React组件三大属性之state

    React组件三大属性之state 组件被称为"状态机", 页面的显示是根据组件的state属性的数据来显示 理解1) state是组件对象最重要的属性, 值是对象(可以包含多个数 ...

  4. React组件的属性

    组件的三大属性 state props refs 写组件的要求: 1>组件必须大写 2>组件必须只有一个根元素 state是组件的重要对象 值可以是对象 组件被称之为 状态机 通过跟新组件 ...

  5. React组件属性部类(propTypes)校验

    React组件属性类型(propTypes)校验 Prop 验证 随着应用不断变大,保证组件被正确使用变得非常有用.为此我们引入propTypes.React.PropTypes 提供很多验证器 (v ...

  6. React组件属性/方法/库属性

    1. propTypes 用于进行props的类型检查:来自于prop-types库. // V15.5之后 import PropTypes from 'prop-types'; 该方法适用于函数组 ...

  7. React组件(组件属性this.state和this.props,css样式修饰组件)

    目录: 1.创建组件的第一种方式 function2.将组件抽离为单独的jsx文件3.省略.jsx后缀, 配置webpack设置根目录4.创建组件的第二种方式--使用class关键字创建组件5.组件私 ...

  8. 野心勃勃的React组件生命周期

    当你还在写着Angular指令,过滤器,注入,服务,提供者,视图模版的时候,是不是觉得很烦,好在这个时候,React已经神一样的出现在历史舞台. React组件    React实现了UI=Fn(St ...

  9. React组件性能优化

    转自:https://segmentfault.com/a/1190000006100489 React: 一个用于构建用户界面的JAVASCRIPT库. React仅仅专注于UI层:它使用虚拟DOM ...

  10. React组件

    React组件 组件是React中的基本单位,在每个组件里面又封装了程序逻辑,通过reader标出界面片段或者回传一段描述,组件再通过React.renderComponent将组件展示在浏览器中.每 ...

随机推荐

  1. Grafana监控OracleDB的完整过程

    Grafana监控OracleDB的完整过程 背景 两年前曾经写过一个进行Oracle 监控的简单blog 但是周天晚上尝试进行处理时发现很不完整了. 很多数据获取不到. 晚上又熬夜了好久进行处理. ...

  2. [转帖]linux学习:sed与awk与tr用法整理

    https://www.cnblogs.com/LO-gin/p/6882490.html 流编辑器:sed 语法:sed [-hnV][-e<script>][-f<script文 ...

  3. [转帖]UseG1GC垃圾回收技术解析

    https://www.cnblogs.com/yuanzipeng/p/13374690.html 介绍 G1 GC,全称Garbage-First Garbage Collector,通过-XX: ...

  4. [转帖]RFC1180

    [译] RFC 1180:朴素 TCP/IP 教程(1991) 译者序 本文翻译自 1991 年的一份 RFC(1180): A TCP/IP Tutorial. 本文虽距今将近 20 年,但内容并未 ...

  5. Docker内JVM参数的简单学习

    Docker内JVM参数的简单学习 背景 公司内部有K8S的项目. 基于K8S内容器的JVM参数的设置与标准虚拟机运行不太一样. 产品内部的启动脚本有一个设置, 在内存大于16G的情况下 默认取内存总 ...

  6. Beyond Compare 的比较以及导出的简单设置方法

    最近需要对文件进行对比 但是发现对比的工作量比较难搞. 用到了beyond compare 的工具 感觉挺好用的 但是需要注意事项比较多这里记录一下 1.  session setting 里面进行设 ...

  7. JVM内存初步学习

    JVM内存初步学习   最近在学习容器内的JVM运行, 简单总结了下学习结果, 但是感觉还是分不清楚很多地方: 同事帮忙进行了 native memory的监控, 主要信息简要如下: jvm刚运行起来 ...

  8. 【计数,DP】ABC306Ex Balance Scale

    Problem Link 现在有 \(n\) 个球,每个球有一个重量,重量未知.接下来会进行 \(m\) 次称重,每次给定 \(a_i\) 和 \(b_i\),比较这两个球的重量,结果可能是 \(&g ...

  9. Protobuf中如何指定json tag

    在 Protocol Buffers (protobuf) 中,可以使用特定的选项来指定生成的 JSON 标签.通过在消息定义中使用 [(json_name)] 选项,可以控制生成的 JSON 字段名 ...

  10. Golang zip压缩文件读写操作

    创建zip文件 golang提供了archive/zip包来处理zip压缩文件,下面通过一个简单的示例来展示golang如何创建zip压缩文件: func createZip(filename str ...