react 入坑笔记(一)
一些概念:
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 入坑笔记(一)的更多相关文章
- react 入坑笔记(四) - React 事件绑定和传参
React 事件处理 建议:在了解 js 的 this 取值后食用更佳. 一.react 与 Html 中用法的异同和注意点 html 中的绑定事件的写法: <button onclick=&q ...
- react 入坑笔记(三) - Props
React Props props - 参数. 组件类 React.Component 有个 defaultProps 属性,以 class xxx extend React.Component 形式 ...
- react 入坑笔记(六) - 组件的生命周期
React 组件生命周期 详细参考: react 组件生命周期 组件的生命周期可分为三个状态: 1.Mounting:已经挂载/插入到真实 DOM 树上: 2.Updating:正在被重新渲染: 3. ...
- react 入坑笔记(五) - 条件渲染和列表渲染
条件渲染和列表渲染 一.条件渲染 条件渲染较简单,使用 JavaScript 操作符 if 或条件运算符来创建表示当前状态的元素,然后让 React 根据它们来更新 UI. 贴一个小栗子: funct ...
- react 入坑笔记(二) - State
React State 一. state 大致思想:在 react 中,每个组件都是一个状态机,通过与用户的交互,实现不同状态,然后渲染 UI,让用户界面和数据保持一致.React 里,只需更新组件的 ...
- Linux探索之路1---CentOS入坑笔记整理
前言 上次跟运维去行方安装行内环境,发现linux命令还是不是很熟练.特别是用户权限分配以及vi下的快捷操作.于是决定在本地安装一个CentOS虚拟机,后面有时间就每天学习一点Linux常用命令. 作 ...
- react 入坑之罪
componentDidMount :生命周期在react下只调用一次, render:比它先执行 componentWillRecvieProps(newProps) :能取到父组件的值 rende ...
- es6 入坑笔记(三)---数组,对象扩展
数组扩展 循环 arr.foreach(){ //回调函数 function(val,index,arr){ //val:当前读取到的数组的值,index:当前读取道德数组的索引,arr:当前的数组名 ...
- es6 入坑笔记(二)---函数扩展,箭头函数,扩展运算符...
函数扩展 1.函数可以有默认值 function demo( a = 10,b ){} 2.函数可以使用解构 function demo( { a = 0,b = 0 } = {} ){ } 3.函数 ...
随机推荐
- day14(2)---列表推导式、生成器推导式、字典推导式、三元表达式
一.列表推导式: ls = [元素表达式 for i in 可迭代对象 if 筛选条件] 案例: # -*- coding: utf-8 -*- '''列表生成式练习''' # 练习一(三元表达式): ...
- Linux中利用grep命令如何检索文件内容详解
前言 Linux系统中搜索.查找文件中的内容,一般最常用的是grep命令,另外还有egrep命令,同时vi命令也支持文件内容检索.下面来一起看看Linux利用grep命令检索文件内容的详细介绍. 方法 ...
- 【C# 复习总结】类、继承和接口
1 类 定义新的数据类型以及这些新的数据类型进行相互操作的方法 定义方式: class Cat { } class Cat:object { } C#中所有的类都是默认由object类派生来的,显示指 ...
- ASP.NET Core依赖注入——依赖注入最佳实践
在这篇文章中,我们将深入研究.NET Core和ASP.NET Core MVC中的依赖注入,将介绍几乎所有可能的选项,依赖注入是ASP.Net Core的核心,我将分享在ASP.Net Core应用 ...
- JSON Web Token 入门教程
原文地址:http://www.ruanyifeng.com/blog/2018/07/json_web_token-tutorial.html JSON Web Token(缩写 JWT)是目前最流 ...
- iptables防火墙规则的添加、删除、修改、保存
原文地址:https://blog.csdn.net/educast/article/details/52093390 本文介绍iptables这个Linux下最强大的防火墙工具,包括配置iptabl ...
- Jenkins - Extended E-mail配置教程
前言: 在Jenkins的使用中邮件提醒是一个常用功能,Extended E-mail Notification是一个功能更为齐全,使用也更为复杂的插件,本文即将为大家详细讲解如何配置相关内容,感兴趣 ...
- 十三、MUI的日期起始和结束日期设置
MUI的日期选择器的使用 // 日期选择器 //生日选择器(不会超过今年) function fdPicker1(id) { var year=new Date().getFullYear(); va ...
- hdu 4135 a到b的范围中多少数与n互质(容斥)
Co-prime 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4135 input The first line on input contains ...
- 在网站开发时,可以设置防盗,不被复制和F12
禁止小功能 //禁止右键 document.oncontextmenu = function () { return false } //禁止f12 document.onkeydown = func ...