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 相关文章推荐
B/S开发中常用javaScript技术与代码
Mar 09 Javascript
CSS+Table图文混排中实现文本自适应图片宽度(超简单+跨所有浏览器)
Feb 14 Javascript
为JS扩展Array.prototype.indexOf引发的问题探讨及解决
Apr 24 Javascript
图片翻转效果具体实现代码
Jan 09 Javascript
node.js中的http.response.writeHead方法使用说明
Dec 14 Javascript
Javascript动态创建表格及删除行列的方法
May 15 Javascript
js实现简洁的TAB滑动门效果代码
Sep 06 Javascript
JavaScript新增样式规则(推荐)
Jul 19 Javascript
gulp加批处理(.bat)实现ng多应用一键自动化构建
Feb 16 Javascript
详解Angular2组件之间如何通信
Jun 22 Javascript
微信小程序公用参数与公用方法用法示例
Jan 09 Javascript
多个vue子路由文件自动化合并的方法
Sep 03 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语法速查表
2006/12/06 PHP
php分页函数示例代码分享
2014/02/24 PHP
php的ajax简单实例
2014/02/27 PHP
php中ob_flush函数和flush函数用法分析
2015/03/18 PHP
php删除数组中重复元素的方法
2015/12/22 PHP
Zend Framework教程之模型Model基本规则和使用方法
2016/03/04 PHP
Laravel框架实现利用中间件进行操作日志记录功能
2018/06/06 PHP
js验证表单第二部分
2006/11/25 Javascript
用cookies实现的可记忆的样式切换效果代码下载
2007/12/24 Javascript
TimergliderJS 一个基于jQuery的时间轴插件
2011/12/07 Javascript
修改file按钮的默认样式实现代码
2013/04/23 Javascript
AngularJS快速入门
2015/04/02 Javascript
js实现点击文本框显示日期选择器特效代码分享
2020/05/21 Javascript
jquery通过name属性取值的简单实现方法
2016/06/20 Javascript
JavaScript之cookie技术详解
2016/11/18 Javascript
原生js简单实现放大镜特效
2017/05/16 Javascript
jQuery取得元素标签名称小结(附代码)
2017/08/16 jQuery
详解React native全局变量的使用(跨组件的通信)
2017/09/07 Javascript
详解Webpack实战之构建 Electron 应用
2017/12/25 Javascript
动态加载权限管理模块中的Vue组件
2018/01/16 Javascript
Vue2.0中三种常用传值方式(父传子、子传父、非父子组件传值)
2018/08/16 Javascript
微信小程序实现简单评论功能
2018/11/28 Javascript
vue实现全匹配搜索列表内容
2019/09/26 Javascript
解决vue项目input输入框双向绑定数据不实时生效问题
2020/08/05 Javascript
python字典键值对的添加和遍历方法
2016/09/11 Python
Python使用time模块实现指定时间触发器示例
2017/05/18 Python
CentOS中升级Python版本的方法详解
2017/07/10 Python
python自动提取文本中的时间(包含中文日期)
2020/08/31 Python
Scrapy爬虫文件批量运行的实现
2020/09/30 Python
Python爬虫爬取微博热搜保存为 Markdown 文件的源码
2021/02/22 Python
玩转CSS3色彩
2010/01/16 HTML / CSS
CSS3 text-shadow实现文字阴影效果
2016/02/24 HTML / CSS
班会关于环保演讲稿
2013/12/29 职场文书
旅游与酒店管理专业求职信
2014/07/21 职场文书
《改造我们的学习》心得体会
2014/11/07 职场文书
2015年国庆放假通知范文
2015/08/18 职场文书