React入门---可复用组件-10
主要对props更多重要的特性进行学习;
还是用之前代码,
index.js代码为:
var React = require('react');
var ReactDOM = require('react-dom');
import ComponentHeader from './components/header';
import ComponentFooter from './components/footer.js';
import BodyIndex from './components/BodyIndex.js';
class Index extends React.Component{
render(){
return(
<div>
<ComponentHeader/>
<BodyIndex/>
{/*在这里给footer组件,添加props外来属性*/}
<ComponentFooter userid={123456}/>
</div>
);
}
}
//与app.html进行一个绑定
ReactDOM.render(<Index/>,document.getElementById('test'));
footer.js的代码为:
import React from 'react';
import ReactDOM from 'react-dom'; export default class ComponentFooter extends React.Component{
constructor(){
super();
this.state = {
username:"azedada",
age:24
}
} render(){
return(
<div>
<h1>这里是底部</h1>
<p>接收到父页面的属性:{this.props.userid}</p>
</div>
)
} }
1.判断类型
现在我们需要对父页面传来的 userId进行 类型判断,只能接受number类型的:
由于React.PropTypes不再适用于React v15.5,改用prop-types库,我们进行配置npm install prop-types -D
import React from 'react';
import ReactDOM from 'react-dom';
//引用prop-types
import PropTypes from 'prop-types'; export default class ComponentFooter extends React.Component{ render(){
return(
<div>
<h1>这里是底部</h1>
{/*接收的userId只能为number类型*/}
<p>接收到父页面的属性:{this.state.username}:{this.state.age},{this.props.userid}</p>
</div>
)
};
}
//对类型的判断,es6的写法
//注意:React.PropTypes不再适用于React v15.5,改用prop-types库; npm install prop-types -D
ComponentFooter.propTypes={
userid:PropTypes.number
}
运行结果:如果userid为number类型则正常,如果为其他类型则报错;
2.当其他人通过父页面调用子页面,忘记传userid了,但是我们需要他必须传,这时候需要用到isRequired属性
(下面代码就在上面基础上直接修改)
//对类型的判断,es6的写法
//注意:React.PropTypes不再适用于React v15.5,改用prop-types库; npm install prop-types -D
ComponentFooter.propTypes={
userid:PropTypes.number.isRequired
}
运行结果:如果userid存在则正常,如果没有则会发出warning警告;
3.如果父页面还有一个username,它不强制必须有,我们可以给它一个默认值,下面是footer.js的代码
import React from 'react';
import ReactDOM from 'react-dom';
//引用prop-types
import PropTypes from 'prop-types'; //给父页面username的值赋一个默认值
const defaultProps={
username:"这是一个默认值"
} export default class ComponentFooter extends React.Component{
constructor(){
super();
this.state = {
username:"azedada",
age:24
}
} //事件函数 改变state的age
changeAge(){
this.setState({age:18})
} render(){
return(
<div>
<h1>这里是底部</h1>
<p>{this.state.username}:{this.state.age}</p>
{/*接收的userId只能为number类型*/}
<p>接收到父页面的属性:{this.props.userid},{this.props.username}</p>
{/*这里写点击事件,注意写法是es6*/}
<input type="button" value="点击改变年龄" onClick={this.changeAge.bind(this)}/>
</div>
)
};
}
//对类型的判断,es6的写法
//注意:React.PropTypes不再适用于React v15.5,改用prop-types库; npm install prop-types -D
ComponentFooter.propTypes={
userid:PropTypes.number.isRequired
}
//对username赋默认值
ComponentFooter.defaultProps=defaultProps;
运行结果:如果父页面index.js没有传username,则会显示"这是一个默认值",如果传入了"内容",则被"内容"替换;
4.父页面传入的所有数据,注意是所有数据,子页面接收到后,继续传给子页面的子页面;即index.js--->footer.js--->footchild.js;
首先创建footchild.js文件,然后引入到父页面footer.js,相信到这里,大家都能自己完成这一步;
{/*下面是子页面footchild*/}{/*{...this.props} 可以把父页面所有的属性收到,并且可以自己定义*/}
<FootChild {...this.props} id={2121}/>
在FootChild组件里面调用出来:既能调用根父级index里面有的,也能调用在自己父级定义的;
import React from 'react';
export default class FootChild extends React.Component{
render(){
return(
<div>
{/*既能调用根父级index里面有的,也能调用在自己父级定义的*/}
<p>{this.props.username} {this.props.userid} {this.props.id} </p>
}
</div>
)
}
}
总结:
React入门---可复用组件-10的更多相关文章
- 【React】学习笔记(一)——React入门、面向组件编程、函数柯里化
课程原视频:https://www.bilibili.com/video/BV1wy4y1D7JT?p=2&spm_id_from=pageDriver 目录 一.React 概述 1.1.R ...
- React躬行记(10)——高阶组件
高阶组件(High Order Component,简称HOC)不是一个真的组件,而是一个没有副作用的纯函数,以组件作为参数,返回一个功能增强的新组件,在很多第三方库(例如Redux.Relay等)中 ...
- Bootstrap入门(十六)组件10:well和具有响应式特性的嵌入内容
Bootstrap入门(十六)组件10:well和具有响应式特性的嵌入内容 well组件可以为内容增添一种切入效果. 具有响应式特性的嵌入内容可以根据被嵌入内容的外部容器的宽度,自动创建一个固定的比例 ...
- React入门介绍(2)- React Component-React组件
React Component-React组件 允许用户自由封装组件是React非常突出的特性,用户可将自己创建的组件像普通的HTML标签一样插入页面,React.CreateClass方法就是用来创 ...
- 【React -- 5/100】 组件复用
组件复用 React组件复用概述 思考:如果两个组件中的部分功能相似或相同,该如何处理? 处理方式:复用相似的功能 复用什么? state 操作state的方法 两种方式: render props模 ...
- React入门看这篇就够了
摘要: 很多值得了解的细节. 原文:React入门看这篇就够了 作者:Random Fundebug经授权转载,版权归原作者所有. React 背景介绍 React 入门实例教程 React 起源于 ...
- react入门(上)
1. ReactJS是什么? 1). Facebook开源的一个js库 2). 一个用于动态构建用户界面的js库2. React的特点 * Declarative(声明式编码) * Component ...
- es6 Object.assign ECMAScript 6 笔记(六) ECMAScript 6 笔记(一) react入门——慕课网笔记 jquery中动态新增的元素节点无法触发事件解决办法 响应式图像 弹窗细节 微信浏览器——返回操作 Float 的那些事 Flex布局 HTML5 data-* 自定义属性 参数传递的四种形式
es6 Object.assign 目录 一.基本用法 二.用途 1. 为对象添加属性 2. 为对象添加方法 3. 克隆对象 4. 合并多个对象 5. 为属性指定默认值 三.浏览器支持 ES6 O ...
- [转]React入门看这篇就够了
摘要: 很多值得了解的细节. 原文:React入门看这篇就够了 作者:Random Fundebug经授权转载,版权归原作者所有. React 背景介绍 React 入门实例教程 React 起源于 ...
随机推荐
- win32/mfc/qt 异常处理与总结
际异常一: libcpmtd.lib(xmbtowc.obj) : error LNK2001: unresolved external symbol __CrtDbgReport Debug/B机. ...
- Servlet3.0新特性使用详解
可插拔的Web框架 几乎所有基于Java的web框架都建立在servlet之上.现今大多数web框架要么通过servlet.要么通过Web.xml插入.利用标注(Annotation)来定义servl ...
- 大数据学习记录之ssh绵密登录
1,在服务器端 ssh-keygen 2,使用ssh-copy-id 192.168.2.146 3,再测试一下ssh 192.168.2.146 exit 退出当前登录 具体流程为:A,B两台机器 ...
- 【转】关于swf安全沙箱冲突:不能被本地访问
错误提示:SWF 文件不能被本地访问 不能访问本地只有仅限于文件系统的 SWF 文件和可信的本地 SWF 文件可以访问本地资源 错误信息:SecurityError:Error #2148: SWF ...
- Android Studio查找功能(搜索功能)及快捷键
版权声明:本文为博主原创文章,未经博主允许不得转载. 1.在当前窗口查找文本[Ctrl+F] F3 向下查找关键字出现位置 Shift+F3 向上一个关 ...
- 变态版大鱼吃小鱼-基于pixi.js 2D游戏引擎
之前用CSS3画了一条
- 在IntelliJ IDEA中添加repository模板
可以用于快速新建一个repository类,减少开发时间 在IntelliJ IDEA settings设置中(ctrl+alt+s)--Editor--File and Code Templates ...
- 关于阿里图标库Iconfont生成图标的三种使用方式(fontclass/unicode/symbol)
1.附阿里图标库链接:http://www.iconfont.cn/ 2.登录阿里图标库以后,搜索我们需要的图标,将其加入购物车,如图3.将我们需要的图标全部挑选完毕以后,点击购物车图标4.这时候右侧 ...
- iterable
iterable 阅读: 148111 遍历Array可以采用下标循环,遍历Map和Set就无法使用下标.为了统一集合类型,ES6标准引入了新的iterable类型,Array.Map和Set都属于i ...
- 【shell编程基础1】shell变量篇
Bash shell bash shell 是bourne shell 的升级版,“bourne again shell”.ubuntu的默认shell. 预备知识 1. "#!" ...