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. RS232标准与TTL/COM小常识

    1.TTL电平标准 输出 L: <0.8V : H:>2.4V. 输入 L: <1.2V : H:>2.0V 2.CMOS电平标准 输出 L: <0.1*Vcc : H: ...

  2. Red Hat操作系统的安装

    1.双击打开VMware虚拟机 2.以下是打开后的界面,点击“创建新的虚拟机” 3.出现新建虚拟机的导向,选择“自定义” 3.选择虚拟机硬件兼容性,使用默认Workstation 12.0就可以 4. ...

  3. 史上最全最新java面试题合集二(附答案)

    下面小编整理了本套java面试题全集,分享给大家,希望对大家的java学习和就业面试有所帮助. 51.类ExampleA继承Exception,类ExampleB继承ExampleA. 有如下代码片断 ...

  4. 【计数DP】种树

    种树 题目描述 事实上,小X邀请两位奆老来的目的远不止是玩斗地主,主要是为了抓来苦力,替他的后花园种树……小X的后花园是环形的,他想在花园周围均匀地种上n棵树,但是奆老花园的土壤当然非同寻常,每个位置 ...

  5. PowerShell自动部署ASP.NET Core程序到 IIS

    Windows PowerShell 是一种命令行外壳程序和脚本环境,使命令行用户和脚本编写者可以利用 .NET Framework的强大功能.有关于更多PowerShell的信息,可参阅百度词条 接 ...

  6. 记一次纯sqlite数据库的小项目开发经历

    sqlite有哪些坑 1.支持的数据量级:根据SQLite的官方提示:http://www.sqlite.org/limits.htmlSQLIte数据库最大支持128TiB(140 terabyte ...

  7. css 省略号的写法

    单行省略号 overflow: hidden; text-overflow:ellipsis; white-space: nowrap; width:500px; 多行省略号 overflow: hi ...

  8. 监控SQL:通过SQL Server的DML触发器来监控哪些IP对表的数据进行了修改(2)

    原文:监控SQL:通过SQL Server的DML触发器来监控哪些IP对表的数据进行了修改(2) 在有些公司中,由于管理的不规范,或者是便于开发人员直接修改.部署程序,往往任何开发人员,都能登录到生产 ...

  9. Go part 7 反射,反射类型对象,反射值对象

    反射 反射是指在程序运行期间对程序本身进行访问和修改的能力,(程序在编译时,变量被转换为内存地址,变量名不会被编译器写入到可执行部分,在运行程序时,程序无法获取自身的信息) 支持反射的语言可以在程序编 ...

  10. Machine Learning Technologies(10月20日)

    Linear regression SVM(support vector machines) Advantages: ·Effective in high dimensional spaces. ·S ...