一些概念:

1.组件:概念等同于 vue 中的组件,字面意思,不过 vue 中组件是以 .vue 结尾,通过 vue-loader 编译成 js,而 react 组件就是 js。

2.jsx:js 语法扩展,编译器遇到 html 标签按照 html 编译,遇到 js(就是 { xxx }) 按照 js 规则编译,类型安全。

3.单项响应的数据流 - 这点暂时没明白。

一、核心库

import React from 'react';
import ReactDOM from 'react-dom';

react 包是核心中的核心,包括创建虚拟 dom 的方法,如 React.createElement ,以及  Component 这个类... 等;

react-dom 包是从 react 中分离出来的,是 虚拟DOM 和真实 dom 之间的粘合剂,也包括一些其他的方法。

二、项目结构(基于 create-react-app)

create-react-app 是 react 项目的 cli 脚手架,等同于 vue-cli。首先需要从 npm 上安装。

$ cnpm install -g create-react-app
$ create-react-app my-app
$ cd my-app/
$ npm start

装完这个 cli 后,my-app 文件夹下的目录结构是:

my-app/
README.md
node_modules/
package.json
.gitignore
public/
favicon.ico
index.html // 入口 html
manifest.json // 这个文件不知道是干啥的,建议保留
src/
App.css
App.js
App.test.js
index.css
index.js // 和 index.html 对应的入口 js
logo.svg

目录结构很乱,可根据自己需求删除除 index.html 和 index.js 之外的文件。

简易版参照:狗屎一样的React(第二节,让目录结构变得更易懂);

注意:可以通过 npm run eject 暴露更多细节。

三、组件

react 创建组件的方法有三种:

1.以 react 工厂的形式创建:

var HelloMessage = React.createClass({
render: function() { // 有 render 函数
return ( // return 一个 jsx
<div>
<h1>xxxx</h1>
<h2>xxxxxx</h2>
</div>
)
}
}) ReactDOM.render( // 渲染
<HelloMessage />,
document.getElementById('root')
)

2.以函数的形式创建:

function HelloMessage(props) {                  // 带一个参数
return ( // 同样 return 一个 jsx
<div>
<h1>Hello,world~</h1>
<h2>现在是 { props.date.toLocaleTimeString() }</h2>
</div>
)
} ReactDOM.render( // 渲染
<HelloMessage date={ new Date()}/>,
document.getElementById('root')
)

3. es 6 中以 class 的形式创建:

class HelloMessage extends React.Component {
render() { // 需要一个 render 函数
return ( // return jsx
<div>
<h1>Hello, world!</h1>
// 注意传参的时候需要使用 this.poops
<h2>现在是 { this.props.date.toLocaleTimeString() }.</h2>
</div>
)
}
} ReactDOM.render( // 渲染
<HelloMessage date={ new Date() }/>,
document.getElementById('root')
)

16版本之后,创建组件的方式略有变化:

import React, { Component } from 'react';

class componentA extends Component {
...
}

三种方式都只是演示了最基本、最简单的组件形式。以 class 形式创建组件是目前版本最推荐的方式。

贴一个组件嵌套:

function Name(props) {
return <h1>网站名称:{props.name}</h1>;
}
function Url(props) {
return <h1>网站地址:{props.url}</h1>;
}
function Nickname(props) {
return <h1>网站小名:{props.nickname}</h1>;
}
function App() {
return (
<div>
<Name name="菜鸟教程" />
<Url url="http://www.runoob.com" />
<Nickname nickname="Runoob" />
</div>
);
} ReactDOM.render(
<App />,
document.getElementById('example')
);

react 入坑笔记(一)的更多相关文章

  1. react 入坑笔记(四) - React 事件绑定和传参

    React 事件处理 建议:在了解 js 的 this 取值后食用更佳. 一.react 与 Html 中用法的异同和注意点 html 中的绑定事件的写法: <button onclick=&q ...

  2. react 入坑笔记(三) - Props

    React Props props - 参数. 组件类 React.Component 有个 defaultProps 属性,以 class xxx extend React.Component 形式 ...

  3. react 入坑笔记(六) - 组件的生命周期

    React 组件生命周期 详细参考: react 组件生命周期 组件的生命周期可分为三个状态: 1.Mounting:已经挂载/插入到真实 DOM 树上: 2.Updating:正在被重新渲染: 3. ...

  4. react 入坑笔记(五) - 条件渲染和列表渲染

    条件渲染和列表渲染 一.条件渲染 条件渲染较简单,使用 JavaScript 操作符 if 或条件运算符来创建表示当前状态的元素,然后让 React 根据它们来更新 UI. 贴一个小栗子: funct ...

  5. react 入坑笔记(二) - State

    React State 一. state 大致思想:在 react 中,每个组件都是一个状态机,通过与用户的交互,实现不同状态,然后渲染 UI,让用户界面和数据保持一致.React 里,只需更新组件的 ...

  6. Linux探索之路1---CentOS入坑笔记整理

    前言 上次跟运维去行方安装行内环境,发现linux命令还是不是很熟练.特别是用户权限分配以及vi下的快捷操作.于是决定在本地安装一个CentOS虚拟机,后面有时间就每天学习一点Linux常用命令. 作 ...

  7. react 入坑之罪

    componentDidMount :生命周期在react下只调用一次, render:比它先执行 componentWillRecvieProps(newProps) :能取到父组件的值 rende ...

  8. es6 入坑笔记(三)---数组,对象扩展

    数组扩展 循环 arr.foreach(){ //回调函数 function(val,index,arr){ //val:当前读取到的数组的值,index:当前读取道德数组的索引,arr:当前的数组名 ...

  9. es6 入坑笔记(二)---函数扩展,箭头函数,扩展运算符...

    函数扩展 1.函数可以有默认值 function demo( a = 10,b ){} 2.函数可以使用解构 function demo( { a = 0,b = 0 } = {} ){ } 3.函数 ...

随机推荐

  1. 初学Python——进程

    什么是进程? 程序不能单独执行,只有将程序装载到内存中,系统为它分配资源才能运行,而这种执行的过程就叫做进程.进程是操作系统调度的最小单位. 程序和进程的区别在于:程序是储存在硬盘上指令的有序集合,是 ...

  2. linux内存源码分析 - 内存回收(整体流程)

    本文为原创,转载请注明:http://www.cnblogs.com/tolimit/ 概述 当linux系统内存压力就大时,就会对系统的每个压力大的zone进程内存回收,内存回收主要是针对匿名页和文 ...

  3. Win7 64位系统,IE11,如何让IE的Tab强制运行64位内核?

    有些人在使用TerraExplorer Pro 7版本进行web二次开发的时候,常会遇到下面截图中这样的问题, 这个问题主要是因为安装的TerraExplorer Pro 7 版本是64位的,而模型运 ...

  4. SQL Server连接查询之Cross Apply和Outer Apply的区别及用法(转载)

    先简单了解下cross apply的语法以及会产生什么样的结果集吧!示例表: SELECT * FROM tableA CROSS APPLY tableB 两张表直接连接,不需要任何的关联条件,产生 ...

  5. 开发手记:JedisConnectionException: Could not get a resource from the pool

    对于Redis,生产环境是集群模式,测试环境是单例模式,如果在生产环境中用单例模式会报错. 解决办法,通过云配置,将配置进行自动化配置. 另附一份Redis配置: #***************** ...

  6. ReactJs入门教程-精华版

    原文地址:https://www.cnblogs.com/Leo_wl/p/4489197.html阅读目录 ReactJs入门教程-精华版 回到目录 ReactJs入门教程-精华版 现在最热门的前端 ...

  7. 关于学习JAVA第二章的心得

    这章主要讲了JAVA的变量,数据类型和运算符的使用方法及规则. 其实在大一的时候接触过一点C和C++的知识所以对变量,数据类型,运算符还是有一定了解的. 变量其实就是存储数据的空间.我们每次使用某一种 ...

  8. 让你一看就懂的快速排序算法(Java)

    快速排序 你也许会被快速排序的文章弄得迷迷糊糊,其实大体上去看,快速排序就一步:找个数做基准数,把小于它的数移到它左边,把大于它的数移到它右边.这句话是核心.然后我们只需要让基准数左边的重复上面的步骤 ...

  9. 第一行代码:以太坊(2)-使用Solidity语言开发和测试智能合约

    智能合约是以太坊的核心之一,用户可以利用智能合约实现更灵活的代币以及其他DApp.不过在深入讲解如何开发智能合约之前,需要先介绍一下以太坊中用于开发智能合约的Solidity语言,以及相关的开发和测试 ...

  10. Windows Community Toolkit 4.0 - DataGrid - Part01

    概述 在上面一篇 Windows Community Toolkit 4.0 - DataGrid - Overview 中,我们对 DataGrid 控件做了一个概览的介绍,今天开始我们会做进一步的 ...