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>
            )
    }
}

总结:

时间: 2024-08-18 11:16:39

React入门---可复用组件-10的相关文章

包建强的培训课程(15):React入门与提高

v\:* {behavior:url(#default#VML);} o\:* {behavior:url(#default#VML);} w\:* {behavior:url(#default#VML);} .shape {behavior:url(#default#VML);} Normal 0 false 10 pt 0 2 false false false EN-US ZH-CN X-NONE $([{£¥·‘“〈<「『[[[〝﹙﹛﹝$(.[{£¥ !%),.:;>?]}¢¨°·ˇˉ

React 入门实例教程

React 入门实例教程 作者: 阮一峰 日期: 2015年3月31日 现在最热门的前端框架,毫无疑问是 React . 上周,基于 React 的 React Native 发布,结果一天之内,就获得了 5000 颗星,受瞩目程度可见一斑. React 起源于 Facebook 的内部项目,因为该公司对市场上所有 JavaScript MVC 框架,都不满意,就决定自己写一套,用来架设 Instagram 的网站.做出来以后,发现这套东西很好用,就在2013年5月开源了. 由于 React 的

(转)React 入门实例教程

作者: 阮一峰 现在最热门的前端框架,毫无疑问是 React . 上周,基于 React 的 React Native 发布,结果一天之内,就获得了 5000 颗星,受瞩目程度可见一斑. React 起源于 Facebook 的内部项目,因为该公司对市场上所有 JavaScript MVC 框架,都不满意,就决定自己写一套,用来架设 Instagram 的网站.做出来以后,发现这套东西很好用,就在2013年5月开源了. 由于 React 的设计思想极其独特,属于革命性创新,性能出众,代码逻辑却非

学习react入门demo的总结。

在github上找到react入门学习比较好的demo,下面是那个链接: https://github.com/ruanyf/react-demos 然后接下来是每个demo的学习笔记: demo1: <body> <div id="example"></div> <script type="text/jsx"> //jsx类型可html和javasript一起写,遇到 HTML 标签,就用 HTML 规则解析:遇到代

react native 之子组件和父组件之间的通信

react native开发中,为了封装性经常需要自定义组件,这样就会出现父组件和子组件,那么怎么在父组件和子组件之间相互通信呢,也就是怎么在各自界面push和pop.传值. 父组件传递给子组件: 父组件: 在主组件里面,使用通过写一个子组件的属性,直接把值或者navigator传给子组件即可.如下20行: 1 /** 2 * Sample React Native App 3 * https://github.com/facebook/react-native 4 * 父组件传递给子组件 5

react入门(5)

对前面四篇内容进行简单的回顾: react入门(1):jsx,组件,css写法 react入门(2):事件,this.props.children,props,...other react入门(3):jsx/html/css分开写(分成三个文件),state,onChange事件,refs react入门(4):props和state的混搭使用,state与props的对比,生命周期(挂载.更新.移除) 今天要讲的是组件之间的通信,会结合前面学的一些内容,主要以实例为主来进行讲解. 一.父组件向

react入门之使用webpack搭配环境(一)

react入门之搭配环境(一) 如果你想直接上手开发,而跳过这些搭配环境的繁琐过程,推荐你使用官方的create-react-app命令 npm install -g create-react-app //安装create-react-app脚手架 npm为node.js的包管理工具,请确保你已经安装了node.js create-react-app my-app //使用create-react-app创建,my-app为项目名称 cd my-app/ //进入my-app目录 npm sta

【转】react入门实例教程

作者: 阮一峰 日期: 2015年3月31日 写在前面:原文链接http://www.ruanyifeng.com/blog/2015/03/react.html    github地址https://github.com/ruanyf/react-demos 现在最热门的前端框架,毫无疑问是 React . 上周,基于 React 的 React Native 发布,结果一天之内,就获得了 5000 颗星,受瞩目程度可见一斑. React 起源于 Facebook 的内部项目,因为该公司对市场

React入门实例教程

文章转自:阮一峰 现在最热门的前端框架,毫无疑问是 React . 上周,基于 React 的 React Native 发布,结果一天之内,就获得了 5000 颗星,受瞩目程度可见一斑. React 起源于 Facebook 的内部项目,因为该公司对市场上所有 JavaScript MVC 框架,都不满意,就决定自己写一套,用来架设 Instagram 的网站.做出来以后,发现这套东西很好用,就在2013年5月开源了. 由于 React 的设计思想极其独特,属于革命性创新,性能出众,代码逻辑却