zoukankan      html  css  js  c++  java
  • 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;
  • 相关阅读:
    重载运算与类型转换——函数调用运算符,重载、类型转换与运算符
    重载运算与类型转换——基本概念,输入和输出运算符,算术和关系运算符,赋值运算符,下标运算符,递增和递减运算符,成员访问运算符
    拷贝控制——拷贝控制和资源管理,交换操作,对象移动
    拷贝控制——拷贝、赋值与销毁
    动态内存——动态数组
    middlegenide&nbsp;&nbsp;eclipse&nbsp;的插件
    jquery
    avg
    dom4j
    dom4j&nbsp;&nbsp;简单使用
  • 原文地址:https://www.cnblogs.com/lyraLee/p/11966051.html
Copyright © 2011-2022 走看看