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 相关文章推荐
点击文章内容处弹出页面代码
Oct 01 Javascript
JavaScript使用cookie实现记住账号密码功能
Apr 27 Javascript
纯javascript制作日历控件
Jul 17 Javascript
简单谈谈json跨域
Mar 13 Javascript
Javascript之深入浅出prototype
Feb 06 Javascript
node.js入门教程之querystring模块的使用方法
Feb 27 Javascript
关于Bootstrap按钮组件消除黄框的方法
May 19 Javascript
vue实现购物车功能(商品分类)
Apr 20 Javascript
ES6 Generator基本使用方法示例
Jun 06 Javascript
javascript+Canvas实现画板功能
Jun 23 Javascript
基于JS实现快速读取TXT文件
Aug 25 Javascript
Javascript异步流程控制之串行执行详解
Sep 27 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
dede3.1分页文字采集过滤规则详说(图文教程)
2007/04/03 PHP
thinkphp模板的包含与渲染实例分析
2014/11/26 PHP
PHP实现的堆排序算法详解
2017/08/17 PHP
HTML node相关的一些资料整理
2010/01/01 Javascript
JavaScript类库D
2010/10/24 Javascript
用Mootools获得操作索引的两种方法分享
2011/12/12 Javascript
javascript实现存储hmtl字符串示例
2014/04/25 Javascript
JQuery中DOM事件冒泡实例分析
2015/06/13 Javascript
使用Chart.js图表库制作漂亮的响应式表单
2015/10/28 Javascript
JS实现在文本指定位置插入内容的简单示例
2017/12/22 Javascript
jQuery实现鼠标响应式淘宝动画效果示例
2018/02/13 jQuery
原生JS实现动态加载js文件并在加载成功后执行回调函数的方法
2020/12/30 Javascript
create-react-app使用antd按需加载的样式无效问题的解决
2019/02/26 Javascript
VUE组件中的 Drawer 抽屉实现代码
2019/08/06 Javascript
VUE前后端学习tab写法实例
2019/08/06 Javascript
使用wxPython获取系统剪贴板中的数据的教程
2015/05/06 Python
在Python中处理字符串之ljust()方法的使用简介
2015/05/19 Python
详解 Python中LEGB和闭包及装饰器
2017/08/03 Python
python 使用re.search()筛选后 选取部分结果的方法
2018/11/28 Python
Python中正则表达式的用法总结
2019/02/22 Python
python多线程扫描端口(线程池)
2019/09/04 Python
Python lambda表达式filter、map、reduce函数用法解析
2019/09/11 Python
tensorflow实现训练变量checkpoint的保存与读取
2020/02/10 Python
使用Django的JsonResponse返回数据的实现
2021/01/15 Python
Html5实现用户注册自动校验功能实例代码
2016/05/24 HTML / CSS
幼儿园教育教学反思
2014/01/31 职场文书
元旦寄语大全
2014/04/10 职场文书
节水标语大全
2014/06/11 职场文书
2014年售后服务工作总结
2014/11/18 职场文书
大学生自我推荐信范文
2015/03/24 职场文书
三八妇女节新闻稿
2015/07/17 职场文书
百年校庆感言
2015/08/01 职场文书
2016年党员承诺书范文
2016/03/24 职场文书
MySQL索引知识的一些小妙招总结
2021/05/10 MySQL
使用JS实现简易计算器
2021/06/14 Javascript
Java elasticsearch安装以及部署教程
2021/06/28 Java/Android