React:快速上手(1)——基础知识

React(有时叫React.jsReactJS)是一个为数据提供渲染为HTML视图的开源JavaScript库,用于构建用户界面

JSX、元素及渲染

1、关于JSX

  JSX(JavaScript XML)是JavaScript语言语法的扩展。与HTML相似JSX提供了一种使用许多开发人员熟悉的语法来构建组件呈现的方法。 React组件通常使用JSX编写,组件也可以用纯JavaScript编写,只是太麻烦。  

  例如,我们使用JSX可以很轻松的描述一个视图

<div>
  <p>Header</p>
  <p>Content</p>
  <p>Footer</p>
</div>

  而如果们用纯JavaScript来描述的话,则要写大量createElement,非常不直观且很难维护。

React.createElement('div', {className: '...'},
React.createElement('p', /* ... p children ... */),
React.createElement('p', /* ... p children ... */),
React.createElement('p', /* ... p children ... */)
);

2、关于元素及渲染

  元素描述了你希望在屏幕上看到的内容

const element = <h1>Hello, world</h1>;

说明:与浏览器DOM元素不同,React元素是普通对象,创建起来很廉价。

  React DOM负责更新DOM以匹配React元素。

  首先必须有一个容器DIV,我们将其称为“根”DOM节点,因为其中的所有内容都将由React DOM管理

<div id="root"></div>

  要将React元素呈现到根DOM节点,请将它们传递给ReactDOM.render()

const element = <h1>Hello, world</h1>;
ReactDOM.render(element, document.getElementById('root'));

  这样以后,打开浏览器,将会显示Hello World!

3、React仅仅更新必要的内容

  React DOM将元素及其子元素的状态与前一时期同元素的状态进行比较,并仅应用使DOM达到所需状态所需的DOM更新

关于组件

1、定义组件

  组件允许您将UI拆分为独立的,可重用的部分,并单独考虑每个部分

  定义组件的最简单方法是编写JavaScript函数:

function Welcome(props) {
return <h1>Hello, {props.name}</h1>;
}

  此函数是一个有效的React组件,因为它接受单个“props”(代表属性)对象参数与​​数据并返回一个React元素。我们称这些组件为“函数组件”,因为它们实际上是JavaScript函数。

  您还可以使用ES6类来定义组件:
class Welcome extends React.Component {
render() {
return <h1>Hello, {this.props.name}</h1>;
}
}

2、传值到组件中

  Props是React中的一个重要概念,我们可以使用props向React组件传递数据,React从props中按到数据,然后返回视图。

  向一个组件传递props的方法是将数据写在组件标签的属性中。

<Square value='A' status='B' />

  对于无状态函数编写的组件中获取props非常简单,只需要将props作为参数传入组件即可:

function Square(props)
{
return <p>{props.value}</p>
}

  在使用类编写的组件中,需要通过this.props获取props,this表示组件实例

class Square extends React.Component{
render(){
return(
<button className='square' value='{this.props.value}'>
{this.props.status}
</button>
)
}
}

  我们可以定义默认的props属性

class App extends Component {
static defaultProps = {
likedText: '取消',
unlikedText: '点赞'
}
}

3、关于组件状态

  State类似于props,但它是私有的并且完全由组件控制。我们可以使用this.setState 来设置组件状态,setState 方法由父类 Component 所提供。当我们调用这个函数的时候,React.js 会更新组件的状态 state ,并且重新调用 render 方法,然后再把 render 方法所渲染的最新的内容显示到页面上

  如下是利用state特性写的计时器组件,其中componentDidMount,componentWillUnmount属于组件的生命周期方法,前者在将组件输出呈现给DOM之后被运行,后者在组件被卸载前执行。

  每隔1秒,state发生改变,React重新渲染组件。

/**
* 计时器组件
*/
class MyTimer extends React.Component{
constructor(props){
super(props)
this.state={time:new Date()}
}
render(){
return(
<div>
Time is {this.state.time.toLocaleTimeString()}
</div>
)
}
componentDidMount(){
this.timeId = setInterval(()=>this.tick(),1000)
}
componentWillUnmount(){
clearInterval(this.timeId)
}
tick(){
this.setState({time:new Date()})
}
}

说明:在JavaScript类中,您需要在定义子类的构造函数时始终调用super。所有具有构造函数的React组件类都应该使用super(props)调用启动它

注意:当我们要改变组件的状态的时候,不能直接用 this.state = xxx 这种方式来修改,如果这样做 React.js 就没办法知道你修改了组件的状态,它也就没有办法更新页面。所以,一定要使用 React.js 提供的 setState 方法,它接受一个对象或者函数作为参数

Props验证

  在一个健壮的程序中,任何输入都是需要验证的,组件也不例外。Props作为组件的输入,必须进行验证。验证props需要用到React.propTypes,它提供很多验证器来验证传入的数据是否合法,当传入非法数据时,控制台回抛出警告。

安装PropTypes库

npm install prop-types

指定Props的类型

PropType提供了一系列的数据类型来帮助我们限定组件的参数,如.array .bool .func .number .object .string .node .element ...

class TestApp extends React.Component {
static propTypes = {
comment: PropTypes.object.isRequired
};
render() {
const {comment} = this.props;
return (<div>{comment}</div>)
}
}

非法参数控制台抛出异常

通过 PropTypes 给组件的参数做类型限制,可以在帮助我们迅速定位错误,这在构建大型应用程序的时候特别有用;另外,给组件加上 propTypes,也让组件的开发、使用更加规范清晰。

React:快速上手(1)——基础知识的更多相关文章

  1. AngularJS2.0教程(一)快速上手之基础知识

    Why Angular2 Angular1.x显然非常成功,那么,为什么要剧烈地转向Angular2? 性能的限制 AngularJS当初是提供给设计人员用来快速构建HTML表单的一个内部工具.随着时 ...

  2. React:快速上手(6)——掌握React Router

    React:快速上手(6)——掌握React Router 引入Router 安装 npm install react-router-dom 基础组件 React Router中有三种类型的组件:路由 ...

  3. 官方 React 快速上手脚手架 create-react-app

    此文简单讲解了官方 React 快速上手脚手架的安装与介绍. 1. React 快速上手脚手架 create-react-app 为了快速地进行构建使用 React 的项目,FaceBook 官方发布 ...

  4. React:快速上手(7)——使用中间件实现异步操作

    React:快速上手(7)——使用中间件实现异步操作 本文参考链接:Stack Overflow redux-thunk 我们使用store.dispath进行派发时,只能传递一个普通对象进去,如下: ...

  5. React:快速上手(5)——掌握Redux(2)

    React:快速上手(5)——掌握Redux(2) 本文部分内容参考阮一峰的Redux教程. React-Redux原理 React-Redux运行机制 我觉得这张图清楚地描述React-Redux的 ...

  6. React:快速上手(4)——掌握Redux(1)

    React:快速上手(4)——掌握Redux 引入Redux 混乱的state管理 随着 JavaScript 单页应用开发日趋复杂,JavaScript 需要管理比任何时候都要多的 state (状 ...

  7. React:快速上手(3)——列表渲染

    React:快速上手(3)——列表渲染 使用map循环数组 了解一些ES6 ES6, 全称 ECMAScript 6.0 ,是 JaveScript 的下一个版本标准,2015.06 发版.ES6 主 ...

  8. React:快速上手(2)——组件通信

    React:快速上手(2)——组件通信 向父组件传递数据 父组件可以通过设置子组件的props属性进行向子组件传值,同时也可以传递一个回调函数,来获取到子组件内部的数据. 效果演示 子组件是输入框,父 ...

  9. python快速改造:基础知识

    改造"Hacking"并不同于破坏"cracking" python快速改造:基础知识 一行就是一行,不管多少,不用加分号 交互式python解释器可以当作计算 ...

随机推荐

  1. ES查看配置和查看全部配置

    http://10.0.0.17:9200/blog/_settings   GET 获取单个index(库的配置) http://10.0.0.17:9200/_settings/_all   GE ...

  2. Tuning 04 Sizing the Buffer Cache

    Buffer Cache 特性 The buffer cache holds copies of the data blocks from the data files. Because the bu ...

  3. 【vijos】1791 骑士的旅行(特殊的技巧)

    https://vijos.org/p/1791 暴力的话只想到bfs,然后估计是状态超了才得20分. 噗,为啥暴力就不能想得简单点QAQ.....这种思想很好啊. 这一题我看了题解后不得不说我竟然没 ...

  4. python bottle学习(二)加载配置文件

    from bottle import (run, route, get, post, default_app, Bottle) """ 首先获得一个app对象,有两种方法 ...

  5. java关于Timer schedule执行定时任务 !!!!!!!!!

    1.在应用开发中,经常需要一些周期性的操作,比如每5分钟执行某一操作等.对于这样的操作最方便.高效的实现方式就是使用java.util.Timer工具类. private java.util.Time ...

  6. 【BZOJ4596】[Shoi2016]黑暗前的幻想乡 容斥+矩阵树定理

    [BZOJ4596][Shoi2016]黑暗前的幻想乡 Description 幽香上台以后,第一项措施就是要修建幻想乡的公路.幻想乡有 N 个城市,之间原来没有任何路.幽香向选民承诺要减税,所以她打 ...

  7. Leetcode-Recover BST

    Two elements of a binary search tree (BST) are swapped by mistake. Recover the tree without changing ...

  8. [LintCode] 有效回文串

    class Solution { public: /** * @param s A string * @return Whether the string is a valid palindrome ...

  9. 转载:Eslint 规则说明

    原文: http://blog.csdn.net/helpzp2008/article/details/51507428 ,//禁止使用alert confirm prompt ,//禁止使用数组构造 ...

  10. 160811、29 个你必须知道的 Linux 命令

    虽然Linux发行版支持各种各样的饿GUI(graphical user interfaces),但在某些情况下,Linux的命令行接口(bash)仍然是简单快速的.Bash和 Linux Shell ...