1. propTypes

用于进行props的类型检查;来自于prop-types库。

// V15.5之后
import PropTypes from 'prop-types';

该方法适用于函数组件和class组件。

如果使用了@babel/plugin-proposal-class-properties插件,

可以直接在组件内部作为静态属性。

class App extends React.Component {
static propTypes = {
name: PropTypes.string.isRequired
}
render() {
return(
<div>{this.props.name}</div>
)
}
}

在组件(class组件和函数组件都适用)外部:

class App extends React.Component {
render() {
return(
<div>{this.props.name}</div>
)
}
}
App.propTypes = {
name: PropTypes.string.isRequired
}
// 函数组件
function App(props){
return(
<div>{props.name}</div>
)
}
App.propTypes = {
name: PropTypes.string.isRequired
}

2.defaultProps

组件的属性。用于给props属性赋初始值,  当属性值为undefined时生效,null不生效。

既可以在组件内部也可以在组件外部。

运行在propTypes类型检查前。

function App(props){
return(
<div>{props.name}</div>
)
}
App.defaultProps = {
name: "lyra"
}
ReactDOM.render(<App name={undefined} />, window.root)

3. displayName

用于React Devtools中显示组件的名称。

函数组件和类组件都可以使用。主要在高阶组件时比较有用。

function withSubscription(WrappedComponent) {
class WithSubscription extends React.Component {/* ... */}
WithSubscription.displayName = `WithSubscription(${getDisplayName(WrappedComponent)})`;
return WithSubscription;
}

4. getDerivedStateFromError(V16.6.0)

类组件的静态方法。用于捕获错误。

static getDerivedStateFromError(error)

同componentDidCatch,捕获子组件抛出的异常。不能捕获自身的异常。

和getDerivedStateFromProps类似,它返回一个state对象,用于下次渲染时展示降级UI,而不是崩溃的组件树。

import React from 'react';

class ErrorBoundary extends React.Component {
state = {
hasError: false
}
// getDerivedStateFromError在“渲染阶段”就会调用;
// 不能出现副作用;如果需要,可以使用componentDidCatch
static getDerivedStateFromError(error) {
return {
hasError: true
}
}
render() {
if (this.state.hasError) {
return <h2>降级UI</h2>
}
return this.props.children;
}
}

PS: 和该方法类似的有componentDidCatch

componentDidCatch(error, info)
// error是错误信息
// info是调用栈信息 info.componentStack

不同点是: componentDidCatch方法中可以执行副作用。如向服务器发送错误日志等。

export default class ErrorBoundary extends React.Component {
state = {
hasError: false
}
static getDerivedStateFromError(error) {
return {
hasError: true
}
}
componentDidCatch(error, info) {
logToServer(info.componentStack)
}
render() {
if (this.state.hasError) {
return <h2>降级UI</h2>
}
return this.props.children;
}
}

5. contextType

组件设置了该属性后,可以通过this.context访问context对象的值。

import {ThemeContext} from './theme-context';

class ThemedButton extends React.Component {
static contextType = ThemeContext;
render() {
let props = this.props;
let theme = this.context; //最近的Provider提供的值
return (
<button
{...props}
style={{backgroundColor: theme.background}}
/>
);
}
} export default ThemedButton;

React组件属性/方法/库属性的更多相关文章

  1. vue组件之间的通信以及如何在父组件中调用子组件的方法和属性

    在Vue中组件实例之间的作用域是孤立的,以为不能直接在子组件上引用父组件的数据,同时父组件也不能直接使用子组件的数据 一.父组件利用props往子组件传输数据 父组件: <div> < ...

  2. List的方法和属性 方法或属性 作用

    List的方法和属性 方法或属性 作用 Capacity 用于获取或设置List可容纳元素的数量.当数量超过容量时,这个值会自动增长.您可以设置这个值以减少容量,也可以调用trin()方法来减少容量以 ...

  3. React组件实现越级传递属性

    如果有这样一个结构:三级嵌套,分别是:一级父组件.二级子组件.三级孙子组件,且前者包含后者,结构如图: 如果把一个属性,比如color,从一级传递给三级,一般做法是使用props逐一向下传递,代码如下 ...

  4. React组件和生命周期简介

        React 简介----React 是 Facebook 出品的一套颠覆式的前端开发类库.为什么说它是颠覆式的呢? 内存维护虚拟 DOM 对于传统的 DOM 维护,我们的步骤可能是:1.初始化 ...

  5. React-Native的基本控件属性方法

    对React-Native的学习,从熟悉基本控件开始. View 属性方法 序号 名称 属性Or方法 类型 说明 1 accessibilityLabel 属性 string   2 accessib ...

  6. React-Native的基本控件属性方法,对React-Native的学习,从熟悉基本控件开始。

    对React-Native的学习,从熟悉基本控件开始. View 属性方法 序号 名称 属性Or方法 类型 说明 1 accessibilityLabel 属性 string   2 accessib ...

  7. Python 小知识点(6)--静态方法、类方法、属性方法

    (1)静态方法-->-@staticmethod装饰类中方法 只是名义上归类管理, 实际上在静态方法里访问不了类或实例中的任何属性 class Dog(object): def __init__ ...

  8. Python类(六)-静态方法、类方法、属性方法

    静态方法 通过@staticmethod来定义,静态方法在类中,但在静态方法里访问不了类和实例中的属性,但静态方法需要类来调用 # -*- coding:utf-8 -*- __author__ = ...

  9. Python的程序结构[1] -> 方法/Method[1] -> 静态方法、类方法和属性方法

    静态方法.类方法和属性方法 在 Python 中有三种常用的方法装饰器,可以使普通的类实例方法变成带有特殊功能的方法,分别是静态方法.类方法和属性方法. 静态方法 / Static Method 在 ...

随机推荐

  1. PAT(B) 1054 求平均值(Java)

    题目链接:1054 求平均值 (20 point(s)) 题目描述 本题的基本要求非常简单:给定 N 个实数,计算它们的平均值.但复杂的是有些输入数据可能是非法的.一个"合法"的输 ...

  2. PAT(B) 1051 复数乘法(Java)

    题目链接:1051 复数乘法 (15 point(s)) 参考博客:1051 复数乘法(PAT 乙级 C++实现)-guangjinzheng 题目描述 复数可以写成 (A+Bi) 的常规形式,其中 ...

  3. WUSTOJ 1347: GCD(Java)互质

    题目链接:1347: GCD Description 已知gcd(a,b)表示a,b的最大公约数. 现在给你一个整数n,你的任务是在区间[1,n)里面找到一个最大的x,使得gcd(x,n)等于1. I ...

  4. VNC的使用

    1. 安装 rpm -ivh tigervnc-server--.el6.x86_64.rpm 如果rpm安装时发现有依赖,建议直接使用yum安装,轻松解决依赖问题: yum install tige ...

  5. (转)FFMPEG 实现 YUV,RGB各种图像原始数据之间的转换(swscale)

    雷霄骅分类专栏: FFMPEG FFmpeg 本文链接:https://blog.csdn.net/leixiaohua1020/article/details/14215391 FFMPEG中的sw ...

  6. git创建本地分支,推送到远程

    创建本地分支git branch 分支名 例如:git branch dev,这条命令是基于当前分支创建的本地分支,假设当前分支是master(远程分支),则是基于master分支创建的本地分支dev ...

  7. mysql授权单个表权限

    mysql> create user haochengtest@'%' identified by 'haocheng.123'; Query OK, 0 rows affected (0.01 ...

  8. java -jar 参数前后位置说明

    springboot项目启动的时候可以直接使用java -jar xxx.jar这样.下面说说参数的一些讲究 1.-DpropName=propValue的形式携带,要放在-jar参数前面 eg:ja ...

  9. 无法解析的外部符号 ___argc nafxcw.lib(appcore.obj)

    参考 https://blog.csdn.net/wfree/article/details/44171157 MFC的使用: 由"在静态库中使用 MFC" 改成 "在共 ...

  10. HTML中的标题<h1>标签的用法!

    在HTML中,<h1>标签是命名标题的元素,并且在网页中起到了很重要的作用,但是不要只是因为想要弄成黑粗字体就使用<h1>标题标签这样不好.如果说你还想要做完网站后需要进一步做 ...