react中props 的使用及进行限制的方法


Posted in Javascript onApril 28, 2021

组件的props( props是一个对象 )

作用:接收传递给组件的数据
特点:

  • 可以给组件传递任意类型的数据
  • props是只读的对象,只能读取属性的值,无法修改对象
  • 注意:使用类组件时,如果写了构造函数,应该将props传递给super(),否则,无法在构造函数中获取到

props props 的使用

<div id="test1"></div>
  <div id="test2"></div>
  <div id="test3"></div>
  <!-- 引入react核心库 -->
  <script src="../js/react.development.js"></script>
  <!-- 引入react-dom,用于支持react操作dom -->
  <script src="../js/react-dom.development.js"></script>
  <!-- 引入babel 用于将jsx 转换为 js -->
  <script src="../js/babel.min.js"></script>
  <script type='text/babel'>
  // 创建组件
  class Person extends React.Component{
    render() {
      console.log(this);
      const{name,age,sex} = this.props
      return(
        <ul>
          <li>姓名:{name}</li>
          <li>性别:{sex}</li>
          <li>年龄:{age+1}</li>
        </ul>
      )
    }
  }
  // 渲染组件到页面
  ReactDOM.render(<Person name="jerry" age={19} sex="男" />,document.getElementById('test1'))
  ReactDOM.render(<Person name="tom" age={18} sex="女" />,document.getElementById('test2'))

  const p = {name:'老刘',age:18,sex:'女'}
  // ReactDOM.render(<Person name={p.name} age={p.age} sex={p.sex} />,document.getElementById('test3'))
  
  ReactDOM.render(<Person {...p} />,document.getElementById('test3'))

  </script>

对props进行限制

一定要引入 prop-types.js 否则会报错

<div id="test1"></div>
  <div id="test2"></div>
  <div id="test3"></div>
  <!-- 引入react核心库 -->
  <script src="../js/react.development.js"></script>
  <!-- 引入react-dom,用于支持react操作dom -->
  <script src="../js/react-dom.development.js"></script>
  <!-- 引入babel 用于将jsx 转换为 js -->
  <script src="../js/babel.min.js"></script>
  <!-- 引入prop-types, 用于对组件标签属性进行限制 引入后全局就多了一个对象 PropTypes -->
  <script src="../js/prop-types.js"></script>

  <script type='text/babel'>
  // 创建组件
  class Person extends React.Component{
    render() {
      console.log(this);
      const{name,age,sex} = this.props
      return(
        <ul>
          <li>姓名:{name}</li>
          <li>性别:{sex}</li>
          <li>年龄:{age+1}</li>
        </ul>
      )
    }
  }
  // 限制规则
  Person.propTypes = {
    // 限制name 内容为字符串  isRequired 表示该内容为必须的不能省略
    name:PropTypes.string.isRequired,
    // 限制sex为字符串
    sex: PropTypes.string,
    // 限制age为数值
    age: PropTypes.number,
    // 限制speak为函数
    speak: PropTypes.func
  }
  Person.defaultProps = {
    sex:'男',// sex 默认值 为男
    age:18,
    speak: function() {
        return [1];
    }
  }
  // 渲染组件到页面
  ReactDOM.render(<Person name="jerry" age={19} />,document.getElementById('test1'))
  ReactDOM.render(<Person name="tom" age={18} sex="女" />,document.getElementById('test2'))

  const p = {name:'老刘',age:18,sex:'女'}
  // ReactDOM.render(<Person name={p.name} age={p.age} sex={p.sex} />,document.getElementById('test3'))
  
  ReactDOM.render(<Person {...p} />,document.getElementById('test3'))

  </script>

Vue 对props进行限定

我们可以为组件的 prop 指定验证要求,例如你知道的这些类型。如果有一个需求没有被满足,则 Vue 会在浏览器控制台中警告你。这在开发一个会被别人用到的组件时尤其有帮助。

为了定制 prop 的验证方式,你可以为 props 中的值提供一个带有验证需求的对象,而不是一个字符串数组。例如:

Vue.component('my-component', {
  props: {
    // 基础的类型检查 (`null` 和 `undefined` 会通过任何类型验证)
    propA: Number,
    // 多个可能的类型
    propB: [String, Number],
    // 必填的字符串
    propC: {
      type: String,
      required: true
    },
    // 带有默认值的数字
    propD: {
      type: Number,
      default: 100
    },
    // 带有默认值的对象
    propE: {
      type: Object,
      // 对象或数组默认值必须从一个工厂函数获取
      default: function () {
        return { message: 'hello' }
      }
    },
    // 自定义验证函数
    propF: {
      validator: function (value) {
        // 这个值必须匹配下列字符串中的一个
        return ['success', 'warning', 'danger'].indexOf(value) !== -1
      }
    }
  }
})

当 prop 验证失败的时候,(开发环境构建版本的) Vue 将会产生一个控制台的警告。

注意那些 prop 会在一个组件实例创建之前进行验证,所以实例的 property (如 data、computed 等) 在 default 或 validator 函数中是不可用的。

类型检查
type 可以是下列原生构造函数中的一个:

String
Number
Boolean
Array
Object
Date
Function
Symbol

额外的,type 还可以是一个自定义的构造函数,并且通过 instanceof 来进行检查确认。例如,给定下列现成的构造函数:

function Person (firstName, lastName) {
  this.firstName = firstName
  this.lastName = lastName
}

你可以使用:

Vue.component('blog-post', {
  props: {
    author: Person
  }
})

来验证 author prop 的值是否是通过 new Person 创建的。

到此这篇关于react 中的 props 的使用以及进行限制的文章就介绍到这了,更多相关react props进行限制内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Javascript 相关文章推荐
[原创]js与自动伸缩图片 自动缩小图片的多浏览器兼容的方法总结
Mar 12 Javascript
JavaScript 验证浏览器是否支持javascript的方法小结
May 17 Javascript
让Firefox支持event对象实现代码
Nov 07 Javascript
jQuery 学习第六课 实现一个Ajax的TreeView
May 17 Javascript
网页防止tab键的使用快速解决方法
Nov 07 Javascript
JS获取当前日期和时间的简单实例
Nov 19 Javascript
jQuery分别获取选中的复选框值的示例
Jun 17 Javascript
Node.js读取文件内容示例
Mar 07 Javascript
Bootstrap 按钮样式与使用代码详解
Dec 09 Javascript
详解Node.js一行命令上传本地文件到服务器
Apr 22 Javascript
vue获取form表单的值示例
Oct 29 Javascript
vue实现页面切换滑动效果
Jun 29 Javascript
React Hook用法示例详解(6个常见hook)
vue使用v-model进行跨组件绑定的基本实现方法
为什么node.js不适合大型项目
JavaScript控制台的更多功能
Apr 28 #Javascript
JavaScript使用canvas绘制坐标和线
JS Object构造函数之Object.freeze
Apr 28 #Javascript
关于vue中如何监听数组变化
You might like
PHP中将字符串转化为整数(int) intval() printf() 性能测试
2020/03/20 PHP
php中\r \r\n \t的区别示例介绍
2014/02/08 PHP
tp5 实现列表数据根据状态排序
2019/10/18 PHP
JQuery 初体验(建议学习jquery)
2009/04/25 Javascript
ASP.NET中使用后端代码注册脚本 生成JQUERY-EASYUI的界面错位的解决方法
2010/06/12 Javascript
更优雅的事件触发兼容
2011/10/24 Javascript
基于jquery的9行js轻松实现tab控件示例
2013/10/12 Javascript
javascript自动给文本url地址增加链接的方法分享
2014/01/20 Javascript
JavaScript控制网页平滑滚动到指定元素位置的方法
2015/04/17 Javascript
简单实现js放大镜效果
2017/07/24 Javascript
30分钟快速入门掌握ES6/ES2015的核心内容(下)
2018/04/18 Javascript
解决vue单页路由跳转后scrollTop的问题
2018/09/03 Javascript
详解从NodeJS搭建中间层再谈前后端分离
2018/11/13 NodeJs
js编写简易的计算器
2020/07/29 Javascript
python利用elaphe制作二维条形码实现代码
2012/05/25 Python
Python实现抓取城市的PM2.5浓度和排名
2015/03/19 Python
Python编程中归并排序算法的实现步骤详解
2016/05/04 Python
Python抓取框架 Scrapy的架构
2016/08/12 Python
python如何为创建大量实例节省内存
2018/03/20 Python
python操作excel文件并输出txt文件的实例
2018/07/10 Python
html5新增的属性和废除的属性简要概述
2013/02/20 HTML / CSS
YSL圣罗兰美妆美国官网:Yves Saint Lauret US
2016/11/21 全球购物
Nice Kicks网上商店:ShopNiceKicks.com
2018/12/25 全球购物
C++:局部变量能否和全局变量重名
2014/03/03 面试题
银行营业厅大堂经理岗位职责
2014/01/06 职场文书
《我要的是葫芦》教学反思
2014/02/23 职场文书
教师敬业奉献模范事迹材料
2014/05/18 职场文书
演讲稿的格式及范文
2014/08/22 职场文书
小学教师暑期培训方案
2014/08/28 职场文书
财政局个人总结
2015/03/04 职场文书
2015年世界粮食日演讲稿
2015/03/20 职场文书
关于成立领导小组的通知
2015/04/23 职场文书
2015年初三班主任工作总结
2015/05/21 职场文书
教师节领导致辞
2015/07/29 职场文书
祝福语集锦:给妹妹结婚的祝福语
2019/12/18 职场文书
php实现自动生成验证码的实例讲解
2021/11/17 PHP