React组件属性/方法/库属性
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组件属性/方法/库属性的更多相关文章
- vue组件之间的通信以及如何在父组件中调用子组件的方法和属性
在Vue中组件实例之间的作用域是孤立的,以为不能直接在子组件上引用父组件的数据,同时父组件也不能直接使用子组件的数据 一.父组件利用props往子组件传输数据 父组件: <div> < ...
- List的方法和属性 方法或属性 作用
List的方法和属性 方法或属性 作用 Capacity 用于获取或设置List可容纳元素的数量.当数量超过容量时,这个值会自动增长.您可以设置这个值以减少容量,也可以调用trin()方法来减少容量以 ...
- React组件实现越级传递属性
如果有这样一个结构:三级嵌套,分别是:一级父组件.二级子组件.三级孙子组件,且前者包含后者,结构如图: 如果把一个属性,比如color,从一级传递给三级,一般做法是使用props逐一向下传递,代码如下 ...
- React组件和生命周期简介
React 简介----React 是 Facebook 出品的一套颠覆式的前端开发类库.为什么说它是颠覆式的呢? 内存维护虚拟 DOM 对于传统的 DOM 维护,我们的步骤可能是:1.初始化 ...
- React-Native的基本控件属性方法
对React-Native的学习,从熟悉基本控件开始. View 属性方法 序号 名称 属性Or方法 类型 说明 1 accessibilityLabel 属性 string 2 accessib ...
- React-Native的基本控件属性方法,对React-Native的学习,从熟悉基本控件开始。
对React-Native的学习,从熟悉基本控件开始. View 属性方法 序号 名称 属性Or方法 类型 说明 1 accessibilityLabel 属性 string 2 accessib ...
- Python 小知识点(6)--静态方法、类方法、属性方法
(1)静态方法-->-@staticmethod装饰类中方法 只是名义上归类管理, 实际上在静态方法里访问不了类或实例中的任何属性 class Dog(object): def __init__ ...
- Python类(六)-静态方法、类方法、属性方法
静态方法 通过@staticmethod来定义,静态方法在类中,但在静态方法里访问不了类和实例中的属性,但静态方法需要类来调用 # -*- coding:utf-8 -*- __author__ = ...
- Python的程序结构[1] -> 方法/Method[1] -> 静态方法、类方法和属性方法
静态方法.类方法和属性方法 在 Python 中有三种常用的方法装饰器,可以使普通的类实例方法变成带有特殊功能的方法,分别是静态方法.类方法和属性方法. 静态方法 / Static Method 在 ...
随机推荐
- ideaui安装破解、相关配置、JRebel破解
前言: Ideaui 2019(官网 https://www.jetbrains.com/idea/?fromMenu) 安装软件就简单啦,下载选择路径就完事了,注意文件名全英文: 但是按照咱们传 ...
- jwt 无状态分布式授权
基于JWT(Json Web Token)的授权方式 JWT 是JSON风格轻量级的授权和身份认证规范,可实现无状态.分布式的Web应用授权: 从客户端请求服务器获取token, 用该token 去访 ...
- Spring Cloud Alibaba学习笔记(11) - RocketMQ事务消息
在Spring中,我们要实现事务,一般通过@Transactional注解实现.这在引入RocketMQ之前没有问题,但是在引入了RocketMQ之后,如果消息发送之后的业务逻辑处理发生了异常的话,这 ...
- hdu 2181.。。。
哈密顿绕行世界问题 Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total S ...
- Spring Security Oauth2 : Possible CSRF detected
Spring Security Oauth2 : Possible CSRF detected 使用Spring Security 作为 Oauth2 授权服务器时,在授权服务器登录授权后,重定向到客 ...
- 2019.9.27,SAP成都研究院数字创新空间团队建设,射箭和游泳
2019年9月27日,秋高气爽,SAP成都研究院数字创新团队全体成员又迎来了一次团队建设活动.这次的主题是:射箭. 在正式活动之前,大家先享用了一顿泰式海鲜火锅: 吃饱喝足之后,我们来到了名为&quo ...
- apache ftp server 设置
<server xmlns="http://mina.apache.org/ftpserver/spring/v1" xmlns:xsi="http://www.w ...
- conda升级TensorFlow
1.打开Anaconda prompt,查看tensorflow各个版本 anaconda search -t conda tensorflow 2.选择自己系统的版本:运行以下命令 anaconda ...
- JAVA笔记整理(六),JAVA中的多态
JAVA引用变量有两个类型:一个是编译时类型,一个运行时类型 编译时类型由声明该变量时使用的类型决定,运行时类型由实际赋给该变量的对象决定.如果编译时类型和运行时类型不一样,就形成了多态. 因为子类其 ...
- TLS之殇如何把我逼上绝望
1.协议的形式化分析,前提是弄清楚协议结构和协议参与者之间的会话交互,以及会话之间使用的加解密算法,签名算法,认证算法,等牵扯的算法.之后便是将要分析的协议部分进行抽象化,具体抽象涉及协议参与者(发起 ...