React的组件化思想尤为明显,一切皆组件,觉着比Vue的组件化思想更加凸显。

const PacketBG = (props) =>(
<div className="packet-bg">
<div className="packet-wrap">
<p>{props.name}</p>
<div className="packet-txt">{props.wishTxt}</div>
<div className="open-packet" onClick={props.onClick}></div>
</div>
</div>
)
PacketBG.defaultProps = {
name:'Jack',
wishTxt:'阖家欢乐,万事如意'
}

React组件也可以实现数据和模板分离,可以写defaultProps,也可以通过使用组件时候给props的属性赋值。

组件之间的互相通讯是通过props来传递的,这个很重要!

State和Props组合使用:可以在父组件中设置state,然后通过子组件的props将其传递到子组件上。

React的数据单向流,自顶向下,从父组件到子组件的流向。

组件的事件处理:

事件绑定采用驼峰写法 : <div onClick={props.onClick}>知道了</div>

而且不能使用返回return false来阻止默认行为,必须使用preventDefault。

1,组件列表的实现:

const ListItem = (props)=>(
<li>{props.value}</li>
)
const ComponetOne = (props)=>{
const numbers = props.numbers;
return (
<ul>
{numbers.map((n,index)=>(
<ListItem key={index} value={n}/>
))}
</ul>
)
}

组件列表必须有key,在使用时候:<ComponetOne numbers={this.state.numbers}/>

2,React组件的API:

setState(nextState,callback)

 //setState是React事件处理函数中和请求回调函数中触发UI更新的主要方法。
this.setState({numbers:[7,8,9]},()=>alert(1))

nextState会合并到当前的state当中,并且重新渲染组件,并且还有回调函数。

replaceState(nextState,callback)  //替换当前的state

setProps(nextProps,callback)  //props是组件的数据流,总是从父组件流向子组件,setProps触发子组件重新渲染。

replaceProps(nextPrps,callback)  //替换当前props

forceUpdate(callback)   //强制更新

注意:

this.setState((prevState, props) => ({
counter: prevState.counter + props.increment
}));

setState的状态更新可能是异步的,所以需要接受一个函数,而不是对象。状态的更新合并是浅合并,类似:Object.assign();

3,props是只读的,意思是说子组件从父组件中传过来的props变量,在子组件内部不能修改,子组件对于从父组件上流传递下来的数据没有控制权。但是可以通过类似input的onChange事件属性,告知父组件,让父组件帮忙修改!

比如:我们要改变一个子组件的状态,若子组件本身具有state状态,那么内部改变其状态可以使用this.setState来更新状态,而若是从上流父组件下面传递来的props值,那么更新其状态,则需要this.props.onHandleChange()事件,告知上流父组件,让其帮忙更新【通常是父组件内部的state】。

React的状态提升:几个组件共用状态数据的时候,可以将共享的数据提升至他们最近的父组件当中统一管理,就达到了状态共享。

4,react组件的组合使用:

function FancyBorder(props) {
return (
<div className={'FancyBorder FancyBorder-' + props.color}>
{props.children}
</div>
);
}

该组件在使用时,props.children类似一个卡槽,JSX标签内的所有内容通过children传入FancyBorder中。如果需要多个入口的话,比如{props.content1},{props.content2},content1和content2可以是两个不同的组件,这样子就构成了组合组件。

React不推荐使用继承,而推荐使用组合组件!

5,React项目的理念思路:

理想情况下,根据“单一功能原则”,一个组件应该只做一件事情。一般构建UI思路自顶向下,也就是先整体后部分,在大型项目中,也可以先部分再整体。

6,JSX组件也可以使用点表示法:

function BlueDatePicker() {
return <MyComponents.DatePicker color="blue" />;
}

MyComponents里面有多个属性,属性值都是JSX组件,父组件使用中可以使用点表示法。

7,组件命名必须大写字母开头,如果是小写开头的标签会被认为是HTML原生标签,JSX的标签名可以是大写开头的变量,这样子的话,组件就是动态的了!

8,React组件的属性,如果没有给属性值,默认是true,下面两个JSX的使用是等价的:

<MyTextBox autocomplete />

<MyTextBox autocomplete={true} />

9,组件的展开属性:

如果props的属性比较多,可以使用对象的展开符...来传递

function App2() {
const props = {firstName: 'Ben', lastName: 'Hector'};
return <Greeting {...props} />;
}

10,Javascript中针对类型检查的库有Flow,TypeScript等,react自v15.5开始,使用prop-types库来进行类型检查。

Flow是Facebook开发的,经常和React一起使用,是专门针对javascript代码的静态类型检查器,可以使用npm进行添加。create-react-app脚手架默认是剥离Flow的。

TypeScript是由微软开发的,可以使用npm进行添加依赖。

11 ,react的ref的用法,目前字符串已废弃,全新的是React.createRef(),是React16.3提供的。

最早的时候在dom上面this.refs[‘inputRef’]来访问Dom,而最新的reactApi推荐通过ref的current属性来拿到dom节点。赋值:this.myRef = React.createRef();然后将ref={this.myRef}挂载dom标签上,访问时通过this.myRef.current来确定dom元素。

React.createRef()方法接收底层DOM元素作为current属性以创建ref。

不能在函数式组件上使用ref,因为它们没有实例!!!想要使用ref,生命周期方法,或者state,必须使用class组件!

回调Refs:在实例属性中存储对DOM节点的引用!

注意:String版本的ref已被移除,如果以前还在使用,建议用回调函数方式代替。

12,react组件是react的核心所在,那么react元素是由JSX创建,这个是必须知道的,而渲染则是通过生命周期函数render(),跟浏览器的交互方法,则会放置在componentDidMount()的生命周期方法中或其他生命周期中。

13,一般网络请求都会放在componentDidMount()中,然后在componentWillUnmount()方法中解除定时器,取消网络请求,清理订阅等。componentDidUpdate()是组件更新时候调用,也就是state更新时候会触发,如果state没有改变,那么将不会调用该函数。

在react中发送Ajax请求,可以搭配Axios,jQuery AJAX,浏览器内置的window.fetch都可以。

【未完待续】

新年flag6——

React的组件的更多相关文章

  1. 移动web端的react.js组件化方案

     背景: 随着互联网世界的兴起,web前端开发的方式越来越多,出现了很多种场景开发的前端架构体系,也对前端的要求日益增高,早已经不是靠一个JQuery.js来做前端页面的时代了,而今移动端变化最大,近 ...

  2. Griddle, griddle-react 一个REACT 表格组件

    Griddle, griddle-react 一个REACT 表格组件: http://griddlegriddle.github.io/Griddle/index.html

  3. React Native组件之Text

    React Native组件之Text相当于iOS中的UILabel. 其基本属性如下: /** * Sample React Native App * https://github.com/face ...

  4. React Native组件之Switch和Picker和Slide

    React Native组件Switch类似于iOS中的UISwitch:组件Slide类似于iOS中UIslider,组件Picker类似于iOS的UIPickerView.他们的使用方法和相关属性 ...

  5. reactjs入门到实战(七)---- React的组件的生命周期

    React的组件的生命周期有三个状态分别是:挂载(生产组件示例化.准备挂载到页面.挂载到页面).更新(更新值.更新DOM).和卸载(卸载后). >>>其他     getInitia ...

  6. React Native 组件之TextInput

    React Native 组件之TextInput类似于iOS中的UITextView或者UITextField,是作为一个文字输入的组件,下面的TextInput的用法和相关属性. /** * Sa ...

  7. React的组件用法

    React.createClass() 中文翻译 https://discountry.github.io/react/3.4K ( https://doc.react-china.org868 ) ...

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

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

  9. react创建组件的几种方式及其区别

    react创建组件有如下几种方式 ①.函数式定义的无状态组件 ②.es5原生方式React.createClass定义的组件   ③.es6形式的extends React.Component定义的组 ...

  10. React 面向组件化编程 - 封装了webpack - npm run build 产生的包的 /static 引用路径问题

    React 面向组件化编程 面向对象 ----> 面向模块 ----> 面向组件 套路: 注意: 组件名必须大写开头: 只能有一个根标签: <input />虚拟DOM 元素必 ...

随机推荐

  1. java连接access的用户名、密码异常Decoding not supported解决

    Java通过ucanaccess对Access数据库.accdb文件连接: public static Connection getConn() { try { String dbURL = &quo ...

  2. 信贷风控模型开发----模型流程&好坏样本定义

    第二章 模型开发流程&好坏样本定义 2.1模型开发流程 2.1.1 评分模型流程图 2.1.2流程图阐述 该小结提出了一些数据指标,如果不明白没有关系,往后的文章笔者会一个个地解释这些指标的含 ...

  3. 吴裕雄--天生自然python学习笔记:python爬虫PM2.5 实时监测显示器

    PM2.5 对人体的健康影响很大,所以空气中的 PM2.5 实时信息受到越来越多的关注. Python 的 Pandas 套件不但可以自动读取网页中的表格 数据 , 还可对数据进行修改.排序等处理,也 ...

  4. OSI体系结构(七层)

    OSI体系结构,意为开放式系统互联.国际标准组织(国际标准化组织)制定了OSI模型.这个模型把网络通信的工作分为7层,分别是物理层.数据链路层.网络层.传输层.会话层.表示层和应用层. 1至4层被认为 ...

  5. MySQL之数据存储引擎

    1.什么是存储引擎: 现实生活中我们用来存储数据的文件有不同的类型,每种文件类型对应各自不同的处理机制:比如处 理文本用txt类型,处理表格用excel,处理图片用png等,数据库中的表也应该有不同的 ...

  6. spring顾问包装通知

    前边说到了顾问就是通知,没有实践,这里就实践一下,证明一下. 虽然可以说顾问就是通知,但是他们还是有的一定的区别的,通知是将目标类中所有的方法都进行的增强,而顾问却可以指定到特定的方法上,也就是说顾问 ...

  7. JavaScript秒转换成天-小时-分钟-秒

    根据时间秒转换成天-小时-分钟-秒 // 秒转换成day.hour.minutes.seconds formatSecond(second: number) { const days = Math.f ...

  8. ZOJ-1163-The Staircases

    dp[i][j]表示i个砖头构成的最高台阶不高于j的楼梯数目 Accepted 1163 C++11 0 2280 #include "bits/stdc++.h" using n ...

  9. A - Divide it! CodeForces - 1176A

    题目: You are given an integer nn. You can perform any of the following operations with this number an ...

  10. 转: zabbix3.2.1安装graphtrees插件

    转自 : http://blog.csdn.net/liang_baikai/article/details/53542317 graphtree介绍 由于zabbix的图像显示一块不太友好,图像没法 ...