前言
学习react有一段时间了,第一遍学习的时候,学的云里来雾里去,只懂了一些皮毛,因为react技术栈包括的内容挺多的,主要包括react、react-router、redux,还有一些辅助工具,比如webpack、ES6、git这些都要学,可以说是必学的。不然很难阅读别人写的什么。我当时这些都不会,公司让我熟悉项目我就sb了。后面我一个模块一个模块的学习。到目前基础的基本都掌握了。
下面我们来学习react基本用法:
一、HTML模板
ES5的写法:
<html>
<head>
<script src="../build/react.js">script>
<script src="../build/react-dom.js">script>
<script src="../build/browser.min.js">script>
head>
<body>
<div id="example">div>
<script type="text/babel">
// ** Our code goes here! **
script>
body>
html>
ES6的写法:
//分别引入react、react-dom库
//有人可能会问这些库在哪?
//这些库已经用npm 指令 打包到内存中了,所以只需要引入即可。
import React,{ Component } from 'react';
import { render } from 'react-dom';
//还缺一个转化ES5的库哦,这时就用到了webpack的loader。
二、ReactDOM.render()
ReactDOM.render()是react最基本的方法,用于将模板转化为HTML语言,并插入指定的DOM节点。
//ES5
RenderDOM.render(
Hello World!
,
document.getElementById("root")
)
//ES6
render(
Hello world!
,
document.getElementById('root')
)
三、JSX语法
上一例的代码,HTML直接可以写在javascript语言中,不需要加任何引号,这就是JSX语法,它允许HTML和javascript的混写。
//ES5
var names = ['Alice', 'Emily', 'Kate'];
ReactDOM.render(
{
names.map(function (name) {
return Hello, {name}!
})
}
,
document.getElementById('example')
);
//ES6
import React,{ Component } from 'react';
import { render } from 'react-dom';
var name = ['xiao','tianxia','bb'];
class Name extends Component{
constructor(props){
super(props);
this.state = {
}
}
render(){
return(
<div>
{
name.map(function(item,index){
//console.log(item);
return (
index}> Hello {item}
)
})
}
div>
)
}
}
export default Name;
上面体现了JSX的基本语法规则,遇到 < 就按照HTML规则解析,遇到 { 就按照 javascript语法解析。
上面运行的结果如下:
JSX允许直接在模板中插入JavaScript变量。如果这个变量是一个数组,则会展开这个数组中的所有成员。
//ES5
var arr = [
<h1>Hello world!h1>,
<h2>React is awesomeh2>,
];
ReactDOM.render(
<div>{arr}div>,
document.getElementById('example')
);
//ES6
var arr = [
<h1>Hello world!h1>,
<h2>React is awesomeh2>,
];
render(){
return(
<div>
{name}
div>
)
}
上面代码arr是一个数组,结果JSX会把它所有的成员添加到模板中。运行结果如下:
Hello world!
React is awesome
四、组件
React允许将代码封装成组件(component),然后像插入普通HTML标签一样,在网页中插入组件。在ES5中React.createClass()就用于生成一个组件类。
var Message = React.createClass({
render: function() {
return Hello {this.props.name}
;
}
});
ReactDOM.render(
"John" />,
document.getElementById('example')
);
//ES6
import React,{ Component } from 'react';
import { render } from 'react-dom';
class Message extends Component{
constructor(props){
super(props);
this.state = {
name: 'xiao'
}
}
render(){
return (
Hello {this.props.name}
)
}
}
export default Message;
Message的父组件是Main
//index.js
import "../css/reset.css";
import "../css/common.css";
import React,{ Component } from "react";
import { render } from "react-dom";
//var react = requie("react");
//var React = require("react");
//var ReactDOM = require("react-dom");
import Header from "../Components/header";
import Content from "../Components/content";
import Footer from "../Components/footer";
import Hello from "../Components/update";
import Name from "../Components/name";
import Message from "../Components/message";
class Main extends Component{
render(){
return (
"container">
{
/*
*/
}
"tianxia"/> //看这里,我是Message组件哦!
)
}
}
render(
,
document.getElementById("root")
);
待更新中