React开发可复用组件

1、prop类型
(1)如果希望整个引用可以复用组件,关键要确保清晰的定义组件及其参数,以便能够直观使用。
React提供了一个非常简单的表达组件接口的强大工具,只要提供组件期望接收的prop名称与对应的验证规则即可。

import React from 'react';
import PropTypes from 'prop-types';

export default function Button({text}){
    return <button>{text}</button>
}

Button.propTypes = {
    text: PropTypes.string
}

如果传入的text值不是string类型,浏览器会报一个警告
在这里插入图片描述
(2)对象类型定义,如下定义user对象,name和subName都是string类型

import React from 'react';
import PropTypes from 'prop-types';

export default function Button({text, user}){
    return (
        <div>
            <div>{user.name}</div>
            <div>{user.subName}</div>
            <button>{text}</button>
        </div>
    )
}

Button.propTypes = {
    text: PropTypes.string,
    user: PropTypes.shape({
        name: PropTypes.string.isRequired,
        subName: PropTypes.string
    }).isRequired
}

(3)自定义函数校验,对user对象中age属性进行校验,只能大于0与100之间

Button.propTypes = {
    text: PropTypes.string,
    user: PropTypes.shape({
        name: PropTypes.string.isRequired,
        subName: PropTypes.string,
        age:(props, propName) => {
            if (props[propName] < 0 || props[propName] >=100) {
                return new Error(`${propName} must be betwwen 1 and 99`)
            }
            return null
        }
    }).isRequired
}

如果不满足条件则报错,如下
在这里插入图片描述
(3)基于以上prop类型,组件的边界已经定义的很清晰了,我们可以进行另一个操作,以便它们更易使用和共享,开发人员能够充分利用这些公共组件,react-docgen库可以为组件自动生成文档
首先执行命令npm install --global react-docgen 安装插件
再执行命令react-docgen Button.jsx,结果如下,将button的props定义生成了一个json文档,方便其他开发人员阅读

Button.propTypes = {
    text: PropTypes.string,
    /**
     * 用户对象
     */
    user: PropTypes.shape({
        /**
         * 用户名称
         */
        name: PropTypes.string.isRequired,
        subName: PropTypes.string
    }).isRequired
}
{
  "description": "",
  "displayName": "Button",
  "methods": [],
  "props": {
    "text": {
      "type": {
        "name": "string"
      },
      "required": false,
      "description": ""
    },
    "user": {
      "type": {
        "name": "shape",
        "value": {
          "name": {
            "name": "string",
            "description": "用户名称",
            "required": true
          },
          "subName": {
            "name": "string",
            "required": false
          }
        }
      },
      "required": true,
      "description": "用户对象"
    }
  }
}

2、逻辑组件与表现组件分离
逻辑组件:
(1)负责渲染对应的表现组件
(2)发起API请求并操作数据
(3)定义事件处理器
表现组件:
(1)负责渲染HTML标记
(2)以props的形式从父组件接收数据
(3)通常写作无状态函数式组件
3、高阶组件

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值