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 相关文章推荐
跨域表单提交状态的变相判断代码
Nov 12 Javascript
jquery1.4.2 for Visual studio 2010 模板文件
Jul 14 Javascript
JS/jQuery实现默认显示部分文字点击按钮显示全部内容
May 13 Javascript
Jquery网页出现的乱码问题的三种解决方法
Jun 30 Javascript
javascript一元操作符(递增、递减)使用示例
Aug 07 Javascript
js实现图片从左往右渐变切换效果的方法
Feb 06 Javascript
angular中使用Socket.io实例代码
Jun 03 Javascript
angular4实现tab栏切换的方法示例
Oct 21 Javascript
jQuery niceScroll滚动条错位问题的解决方法
Feb 03 jQuery
js实现按钮开关单机下拉菜单效果
Nov 22 Javascript
解决layui 三级联动下拉框更新时回显的问题
Sep 03 Javascript
js实现鼠标点击页面弹出自定义文字效果
Dec 24 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
《OVERLORD》第四季,终于等到你!
2020/03/02 日漫
探讨如何把session存入数据库
2013/06/07 PHP
orm获取关联表里的属性值
2016/04/17 PHP
Yii全局函数用法示例
2017/01/22 PHP
PHP单例模式模拟Java Bean实现方法示例
2018/12/07 PHP
js 无提示关闭浏览器页面的代码
2010/03/09 Javascript
Javascript图像处理思路及实现代码
2012/12/25 Javascript
js判断横竖屏及禁止浏览器滑动条示例
2014/04/29 Javascript
JS辨别访问浏览器判断是android还是ios系统
2014/08/19 Javascript
BAT及各大互联网公司2014前端笔试面试题--JavaScript篇
2014/10/29 Javascript
JQuery表单验证插件EasyValidator用法分析
2014/11/15 Javascript
js函数与php函数的区别实例浅析
2015/01/12 Javascript
基于javascript实现图片懒加载
2016/01/05 Javascript
Node.js中使用jQuery的做法
2016/08/17 Javascript
npm scripts 使用指南详解
2018/10/08 Javascript
JavaScript链式调用实例浅析
2018/12/19 Javascript
Bootstrap 时间日历插件bootstrap-datetimepicker配置与应用小结
2019/05/28 Javascript
vue项目中使用多选框的实例代码
2020/07/22 Javascript
[01:05:36]VP vs TNC Supermajor小组赛B组 BO3 第二场 6.2
2018/06/03 DOTA
[48:37]EG vs OG 2018国际邀请赛小组赛BO2 第一场 8.17
2018/08/18 DOTA
Python 的 with 语句详解
2014/06/13 Python
python urllib urlopen()对象方法/代理的补充说明
2017/06/29 Python
使用Python爬了4400条淘宝商品数据,竟发现了这些“潜规则”
2018/03/23 Python
Python for循环生成列表的实例
2018/06/15 Python
对python中的try、except、finally 执行顺序详解
2019/02/18 Python
python+selenium 点击单选框-radio的实现方法
2019/09/03 Python
HTML5标签与HTML4标签的区别示例介绍
2013/07/18 HTML / CSS
为娇小女性量身打造:Petite Studio
2018/11/01 全球购物
美国家居装饰店:Pier 1
2019/09/04 全球购物
电话销售经理岗位职责
2013/12/07 职场文书
园林技术个人的自我评价
2014/02/15 职场文书
媒矿安全生产承诺书
2014/05/23 职场文书
2016教师政治学习心得体会
2016/01/23 职场文书
python基于tkinter实现gif录屏功能
2021/05/19 Python
【DOTA2】半决赛强强对话~ PSG LGD vs EHOME - DPC 2022 CN REGIONAL FINALS WINTER
2022/04/02 DOTA
Apache SkyWalking 监控 MySQL Server 实战解析
2022/09/23 Servers