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代码
May 27 Javascript
JavaScript判断窗口是否最小化的代码(跨浏览器)
Aug 01 Javascript
jQuery 图片切换插件(代码比较少)
May 07 Javascript
Javascript代码在页面加载时的执行顺序介绍
May 03 Javascript
JQuery在页面中添加和除移DOM示例代码
Jun 24 Javascript
jquery easyui滚动条部分设置介绍
Sep 12 Javascript
js中window.open打开一个新的页面
Aug 10 Javascript
Node.js Sequelize如何实现数据库的读写分离
Oct 23 Javascript
基于JavaScript实现拖动滑块效果
Feb 16 Javascript
详解JS获取HTML DOM元素的8种方法
Jun 17 Javascript
简单谈谈原生js的math对象
Jun 27 Javascript
基于BootStrap multiselect.js实现的下拉框联动效果
Jul 28 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
什么是MVC,好东西啊
2007/05/03 PHP
PHP的一个基础知识 表单提交
2011/07/04 PHP
laravel安装zend opcache加速器教程
2015/03/02 PHP
codeigniter中view通过循环显示数组数据的方法
2015/03/20 PHP
HTML中不支持静态Expando的元素的问题
2007/03/08 Javascript
JS按位非(~)运算符与~~运算符的理解分析
2011/07/31 Javascript
各浏览器中querySelector和querySelectorAll的实现差异分析
2012/05/23 Javascript
json原理分析及实例介绍
2012/11/29 Javascript
javascript 弹出的窗口返回值给父窗口具体实现
2013/11/23 Javascript
举例讲解Node.js中的Writable对象
2015/07/29 Javascript
jQuery 1.9.1源码分析系列(十)事件系统之绑定事件
2015/11/19 Javascript
Jquery实现select multiple左右添加和删除功能的简单实例
2016/05/26 Javascript
让你一句话理解闭包(简单易懂)
2016/06/03 Javascript
vue.js指令v-for使用及索引获取
2016/11/03 Javascript
JavaScript中捕获/阻止捕获、冒泡/阻止冒泡方法
2016/12/07 Javascript
javascript中闭包概念与用法深入理解
2016/12/15 Javascript
JavaScript Base64 作为文件上传的实例代码解析
2017/02/14 Javascript
解决vue项目中type=”file“ change事件只执行一次的问题
2018/05/16 Javascript
深入理解Vue.js轻量高效的前端组件化方案
2018/12/10 Javascript
JavaScript之数组扁平化详解
2019/06/03 Javascript
jquery实现简易验证插件封装
2020/09/13 jQuery
[01:01:23]完美世界DOTA2联赛PWL S2 Forest vs FTD.C 第一场 11.26
2020/11/30 DOTA
python计算文本文件行数的方法
2015/07/06 Python
在win和Linux系统中python命令行运行的不同
2016/07/03 Python
python数字图像处理之骨架提取与分水岭算法
2018/04/27 Python
python3 os进行嵌套操作的实例讲解
2020/11/19 Python
python mongo 向数据中的数组类型新增数据操作
2020/12/05 Python
奥地利领先的在线药房:SHOP APOTHEKE
2019/10/07 全球购物
武汉高蓝德国际.net机试
2016/06/24 面试题
计算机专业推荐信范文
2013/11/20 职场文书
自查自纠工作情况报告
2014/10/29 职场文书
中学生社区服务活动报告
2015/02/05 职场文书
运动会广播稿200字
2015/08/19 职场文书
2016国培研修心得体会
2016/01/08 职场文书
关于CSS自定义属性与前端页面的主题切换问题
2022/03/21 HTML / CSS
如何用六步教会你使用python爬虫爬取数据
2022/04/06 Python