07.React组件进阶(二)Props 深入

props 校验

//1.对于组件来说,props是外来的,无法保证组件使用者传入什么格式的数据
//2.如果传入的数据格式不对,可能会导致组件内部报错
//3.关键问题:组件的使用者不知道明确的错误原因
//4.props 校验:允许在创建组件的时候,就指定props的类型,格式等

App.propTypes = {
    colors:PropTypes.array
}

//5.作用:捕获使用组件时因为props 导致的错误,给出明确的错误提示,增加组件的健壮性

使用步骤

1.安装包 prop-types (yarn add  prop-types/npm i props-types)
2.导入 prop-types包
3.使用 组件名.propTypes = {} 来给组件的props添加校验规则
4.校验规则 通过PropTypes 对象来指定
import PropTypes from 'prop-types'

const App = props =>{
    const arr = props.colors
    const lis = arr.map((item,index)=><li key={index} >{item}</li>)

    return <ul>{lis}</ul>
}
//添加props校验
App.propTypes={
    //约定colors属性为array类型
    //如果类型不对,则报出明确错误,便于分析错误原因
    colors:PropTypes.array
}
ReactDOM.render(<App colors={['red','blue']}/>,document.getElementById('root'))

props 校验-约束规则

1.常见类型:array, bool, func, number, object, string
2.React元素类型:element
3.必填项:isRequied

//常见类型
optionalFunc:PropTypes.func

//必选
requiredFunc: PropTypes.func.isRequired,

//特定结构的对象
optionalObjectWithShape: PropTypes.shape({
    colors: PropTypes.string,
    fontSize:PropTypes.number
})
import PropTypes from 'prop-types'

const App = props =>{
    return(
        <div>
            <h1>props校验:</h1>
        </div>
    )
}
//添加props校验
//属性 a 的类型:      数值(number)
//属性 fn 的类型:     函数(func)并且为必填项
//属性 tag 的类型:    React元素(element)
//属性 filter 的类型: 对象({area:‘上海',price:1999})
App.propTypes={
    a:PropTypes.number,
    fn:PropTypes.func.isRequired,
    tag:PropTypes.element,
    filter:PropTypes.shape({
        area:PropTypes.string,
        price:PropTypes.number
    })
}
ReactDOM.render(<App fn={()=>{}}/>,document.getElementById('root'))

props 的默认值

//场景:分页组件-> 每页显示条数
//作用:给props 设置默认值,在未传入 props时生效
//(如果由传入,以传入值为准)

import PropTypes from 'prop-types'

const App = props =>{
    return(
        <div>
<h1>此处展示props的默认值:{props.pageSize}</h1>
        </div>
    )
}
//添加默认值
App.defaultProps={
    pageSize:10
}
ReactDOM.render(<App />,document.getElementById('root'))

原文地址:https://www.cnblogs.com/foreverLuckyStar/p/12246896.html

时间: 2024-10-06 18:35:42

07.React组件进阶(二)Props 深入的相关文章

06.React组件进阶(二)Context

Context 作用:跨组件传递数据(比如主题,语言等) 使用步骤: 1.使用Reat.creatContext()创建Provider(提供数据和 Consumer(消费数据) 两个组件 const {Provider,Consumer} = React.createContext() 2.使用Provider组件作为父节点 <Provider> <div className="App"> <Child1 /> </div> </

React组件系统、props与状态(state)

 多个组件合成一个组件: var style = { fontSize: 20, color: '#ff0000' }; var WebSite = React.createClass({ render: function () { return ( <div style={style}> <Name name={this.props.name} /> <Link link={this.props.link} /> </div> ); } }); var N

2017.12.07 React组件嵌套以及for循环渲染子组件

1.嵌套组件之父组件的定义: export default class Examines extends Component{ componentWillMount() { console.log("aaaaaaaa"); var data2={ action:"queryTaskOfManager" }; Common.getData(JSON.stringify(data2),function (ret) { alert(ret); var data3={ na

react初探(二)之父子组件通信、封装公共组件

一.前言 在组件方面react和Vue一样的,核心思想玩的就是组件,下面举两个组件常用的情景. 场景一:假如我们现在有一个页面包含表格以及多个弹框,这种时候如果将这个页面的业务代码写在一个组件中,那么这一块的代码会看着非常恶心.如果这个时候我们将这个页面的表格以及弹框这些单独的模块分别写成组件的形式,然后再在这个页面中将这些组件引入进来,那样我们的代码会看着非常整洁.这样做会需要使用到父子组件之间的通信,下面会详细解释. 场景二:日常项目中我们会经常遇到某一个功能会在不同地方使用,但是每次使用的

React -- 组件封装&amp;props

一.组件封装 一个函数就是一个组件,该函数接受一个props对象,并返回一个React元素 function Welcome(props) { return <h1>Hello, {props.name}</h1>; } 通过class和React.Component也可以定义一个组件,跟上面的组件是等价的 class Welcome extends React.Component { render() { return <h1>Hello, {this.props.n

二、React初体验之React组件创建

(中间因为应付各种考试,处理其他事情,隔了好时间没更新,现在终于有时间了,续上!) 本文为React初始体验,因此先不考虑文件如何组织,尽量以最简单的方式让大家了解React其中的原理. 在创建组件(component)之前,大家首先需要了解一些基础知识.有ES6.JSX语法等基础知识的同学请跳过下面一段. ES6是JavaScript的最新标准,里面新增了许多语法方式,甚至出现了“类”的继承方式,我个人暂且把他们理解为新增了许多“语法糖”,这些“语法糖”可能带给老手的是方便,而对于我们这些菜鸟

为什么react的组件要super(props)

为什么react的组件要super(props) 摘自 https://segmentfault.com/q/1010000008340434 (非原创) 如图,我知道supert是继承constructor的参数,但是为什么在react里面,有一些组件使用了super(props),而有一些没有写,还有在es6里就只是写了supert(),这些区别在哪呢?以及这里的这个constructor(props)...super(props)是起到什么作用呢 这个是全代码: 已采纳 调用super的原

从 0 到 1 实现 React 系列 —— 组件和 state|props

看源码一个痛处是会陷进理不顺主干的困局中,本系列文章在实现一个 (x)react 的同时理顺 React 框架的主干内容(JSX/虚拟DOM/组件/...) 项目地址 组件即函数 在上一篇 JSX 和 Virtual DOM 中,解释了 JSX 渲染到界面的过程并实现了相应代码,代码调用如下所示: import React from 'react' import ReactDOM from 'react-dom' const element = ( <div className="titl

React 组件之间如何交流

原文  http://blog.51yuekan.com/2015/07/23/2015-07-19-react-component-communicate/ 主题 React 前言 今天群里面有很多都在问关于 React 组件之间是如何通信的问题,之前自己写的时候也遇到过这类问题.下面是我看到的一篇不错英文版的翻译,看过我博客的人都知道,我翻译可能不会按部就班,会尽可能用中文的意思,来将作者要讲述的技术描述清楚.英文能力有限,如果有不对的地方请跟我留言,一定修改--^_^ 原著序 处理 Rea