一、创建组件

1.函数式创建

  特点:

  • 组件不能访问this对象
  • 组件无法访问生命周期的方法
  • 无状态组件只能访问输入的props,无副作用
function Title() {
  return <h2>新闻列表</h2>;
} 2.继承component类来创建组件 (一般我们用继承React.Component类的方式来创建组件)
 特点:
  • 组件能访问this对象
  • 组件有访问生命周期的方法
  • 有组件状态state
class Title extends React.Component{
  constructor(props){
    super(props);
  }
  render() {
    return <h2>新闻列表</h2>;
  }
}

二、组件渲染

单闭合调用(只能传props的值)
<Title /> 双闭合调用 (标签内还可以写子标签)
<Title></Title>
<Title>hello word</Title> 

在组件内可以通过this.props.children获取, 或者通过React.Children.map(this.props.children, item=>{returm <div>{item}</div>})

三.属性

调取组件的时候,传递给组件的信息(render渲染的时候会把props传递给组件,props就是属性)

作用:让组件丰富化(传递不同的属性控制组件展示不同的效果)

特点:传递进来的属性在组件内部不能修改,也就是它是“只读的”。(修改属性的值,只能重新调取组件并且重新传递值)

虽然不可以修改属性值,但是在类创建组件的方式中,我们可以给组件设置默认值和设置一些规则。

import React from 'react';

import PropTypes from 'prop-types';  //使用 PropTypes 进行类型检查

class Say extends React.Component{
  //设置默认值
  static defaultProps = {
    title: 'hello word'
  }
  //设置默认规则
  static propTypes = {
    title: PropTypes.string,
    num: PropTypes.number.isRequired
  }
  constructor(props){
    //当super中没有传入props时
    /**
    * 1.在调用组件开始执行constructor,参数props是传递进来的属性信息(而且是经过defaultProps和propTypes等处理过的)
    * 2.但是此时还没有挂载到实例上,所以this.props的结果是undefined
    * 3.constructor结束后,挂载就完成了,所以其它生命周期函数中是可以基于this.props来获取属性的
    */
    // super();
    // console.log(props, this.props) //{title: "two", num: 20} undefined     //当super中传入props时
    /**
    * 会在当前实例上挂载很多私有属性
    * this.props = props;
    * this.context = context;
    * this.refs = {};
    * 现在不这样处理,当constructor执行完成,react也会帮我们给实例挂载这些属性
    */
    super(props); //call继承:React.Component.call(this)
    console.log(props, this.props) //{title: "two", num: 20} {title: "two", num: 20}     //实例上还可以调取Component类的两个方法
    /**
    * this.setState()
    * this.forceUpdate()
    */
  }
  render() {
    return (
      <p>{this.props.title}</p>
    )
  }
}
// Say.propTypes = {
// title: PropTypes.string
// }
export default Say; <Say title={'two'} num={20}></Say>

组件与props简解的更多相关文章

  1. React Native组件、生命周期及属性传值props详解

    创建组件的三种方式 第一种:通过ES6的方式创建 /** * 方式一 :ES6 */ export default class HelloComponent extends Component { r ...

  2. 【react】利用prop-types第三方库对组件的props中的变量进行类型检测

    1.引言--JavaScript就是一个熊孩子   1.1对于JSer们来说,js是自由的,但同时又有许多让人烦恼的地方.javascript很多时候就是这么一个熊孩子,他很多时候并不会像C和java ...

  3. React 精要面试题讲解(二) 组件间通信详解

    单向数据流与组件间通信 上文我们已经讲述过,react 单向数据流的原理和简单模拟实现.结合上文中的代码,我们来进行这节面试题的讲解: react中的组件间通信. 那么,首先我们把看上文中的原生js代 ...

  4. 在vue中子组件修改props引发的对js深拷贝和浅拷贝的思考

    不管是react还是vue,父级组件与子组件的通信都是通过props来实现的,在vue中父组件的props遵循的是单向数据流,用官方的话说就是,父级的props的更新会向下流动到子组件中,反之则不行. ...

  5. React—组件生命周期详解

    React—组件生命周期详解 转自 明明的博客  http://blog.csdn.net/slandove/article/details/50748473 (非原创) 版权声明:转载请注明出处,欢 ...

  6. Vue组件通信方式全面详解

    vue组件通信方式全面详解 众所周知,Vue主要思想就是组件化开发.因为,在实际的项目开发中,肯定会以组件的开发模式进行.形如页面和页面之间需要通信一样,Vue 组件和组件之间肯定也需要互通有无.共享 ...

  7. python ConfigParser、shutil、subprocess、ElementTree模块简解

    ConfigParser 模块 一.ConfigParser简介ConfigParser 是用来读取配置文件的包.配置文件的格式如下:中括号“[ ]”内包含的为section.section 下面为类 ...

  8. vc中调用Com组件的方法详解

    vc中调用Com组件的方法详解 转载自:网络,来源未知,如有知晓者请告知我.需求:1.创建myCom.dll,该COM只有一个组件,两个接口:   IGetRes--方法Hello(),   IGet ...

  9. Vue组件选项props

    前面的话 组件接受的选项大部分与Vue实例一样,而选项props是组件中非常重要的一个选项.在 Vue 中,父子组件的关系可以总结为 props down, events up.父组件通过 props ...

随机推荐

  1. Android Studio(九):引用jar及so文件

    Android Studio相关博客: Android Studio(一):介绍.安装.配置 Android Studio(二):快捷键设置.插件安装 Android Studio(三):设置Andr ...

  2. CSS优化,提高性能的方法有哪些?

    1,首推的是合并css文件,如果页面加载10个css文件,每个文件1k,那么也要比只加载一个100k的css文件慢. 2,减少css嵌套,最好不要套三层以上. 3,不要在ID选择器前面进行嵌套,ID本 ...

  3. 2018-8-10-win10-uwp-调试软件启动

    title author date CreateTime categories win10 uwp 调试软件启动 lindexi 2018-08-10 19:16:51 +0800 2018-03-0 ...

  4. java面向接口编程之适配器模式

    使用一个现成的类,但是它的接口不完全符合你的需求,我只想要它其中的一个方法,不想覆写其他的方法. 比如,窗体有变大,变小,关闭的行为,但是我现在只需要关闭行为;   package reviewDem ...

  5. Vue 小实例 跑马灯效果

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  6. linux预备知识

    我们正在接近去看一些实际的模块代码. 但是首先, 我们需要看一些需要出现在你的模块 源码文件中的东西. 内核是一个独特的环境, 它将它的要求强加于要和它接口的代码上. 大部分内核代码包含了许多数量的头 ...

  7. linux 在 1 MB 之下的 ISA 内存

    一个最著名的 I/O 内存区是在个人计算机上的 ISA 范围. 这是在 640 KB(0xA0000)和 1 MB(0x100000)之间的内存范围. 因此, 它正好出现于常规内存 RAM 中间. 这 ...

  8. 如何在很短的时间内将大量数据插入到ConcurrentHashMap(转)

    将大批量数据保存到map中有两个地方的消耗将会是比较大的:第一个是扩容操作,第二个是锁资源的争夺.第一个扩容的问题,主要还是要通过配置合理的容量大小和扩容因子,尽可能减少扩容事件的发生:第二个锁资源的 ...

  9. 如何用python“优雅的”调用有道翻译?

    前言 其实在以前就盯上有道翻译了的,但是由于时间问题一直没有研究(我的骚操作还在后面,记得关注),本文主要讲解如何用python调用有道翻译,讲解这个爬虫与有道翻译的js“斗争”的过程! 当然,本文仅 ...

  10. JNI相关使用记录

    JNI 工作流程 java层调用system.load方法. 通过classloader拿到了so文件的绝对路径,然后调用nativeload()方法. 通过linux下的dlopen方法,加载并查找 ...