1、在标签内部的注释需要花括号
2、在标签外的的注释不能使用花括号
ReactDOM.render(
/*注释 */
孙朝阳 {/*注释*/}
,
document.getElementById('example')
);
代码中嵌套多个 HTML 标签,需要使用一个标签元素包裹它
var HelloMessage = React.createClass({
render: function() {
return Hello World!
;
}
});
ReactDOM.render(
,
document.getElementById('example')
);
混合组件
<html>
<head>
<meta charset="UTF-8" />
<title>菜鸟教程 React 实例title>
<script src="https://cdn.bootcss.com/react/15.4.2/react.min.js">script>
<script src="https://cdn.bootcss.com/react/15.4.2/react-dom.min.js">script>
<script src="https://cdn.bootcss.com/babel-standalone/6.22.1/babel.min.js">script>
head>
<body>
<div id="example">div>
<script type="text/babel">
var WebSite = React.createClass({
render: function() {
return (
<div>
<Name name={this.props.name} />
<Link site={this.props.site} />
div>
);
}
});
var Name = React.createClass({
render: function() {
return (
<h1>{this.props.name}h1>
);
}
});
var Link = React.createClass({
render: function() {
return (
<a href={this.props.site}>
{this.props.site}
a>
);
}
});
ReactDOM.render(
<WebSite name="菜鸟教程" site=" http://www.runoob.com" />,
document.getElementById('example')
);
script>
body>
html>
组件添加事件
var LikeButton = React.createClass({
getInitialState: function() {
return {liked: false};
},
handleClick: function(event) {
this.setState({liked: !this.state.liked});
},
render: function() {
var text = this.state.liked ? '喜欢' : '不喜欢';
return (
this.handleClick}>
你{text}我。点我切换状态。
);
}
});
ReactDOM.render(
,
document.getElementById('example')
);
windows系统下:
npm install -g create-react-app
Liunx和Mac电脑下:
sudo npm install -g create-react-app
这里的 -g 是全局安装的意思。
创建React项目
我们安装好create-react-app之后,就可以创建我们的React目录了,命令如下:
create-react-app my-app
1
create-react-app my-app
这里是有个小坑的,就是你的目录名不要使用大写,这样作只要是为了严谨性,因为在Linux下是严格区分大小写的。
启动服务
直接在命令行中输入:
npm start
react的生态圈非常庞大,第三方的构建工具也有很多种,这节课介绍一个在业内比较流行的构建工具generator-react-webpack,它是需要yeoman的支持的。
npm install -g yo
npm install -g generator-react-webpack
创建目录
我们先用命令自行创建一个文件:new-react-demo
mkdir new-react-demo
用生成器生成我们的项目目录
yo react-webpack
用npm start就可以查看效果了。
我们在视频中还讲解了目录结构,让你更好的掌握generator-react-webpack.
总结:generator-react-webpack更容易配置webpack,让你适应你的实际项目,并且有很强的扩展功能。一般我们团队都会使用这个脚手架来生产react的目录结构,但也有缺点,就是要依靠yeoman来生成。
安装包还是要打开命令行工具,使用npm来进行安装。
npm install --save react-router react-router-dom
react-router:是基本的router包,里边函的内容较多,但是在网页开发中有很多用不到,现在的市面上的课程讲的基本都是这个包的教程。
react-router-dom:随着react生态环境的壮大,后出现的包,这个包比react-router包轻巧了很多。
注意:其实安装了react-router包就不用安装了react-router-dom包了,这里我们只是为了讲课方便所以安装了两个包。在实际开发中,请根据需要进行安装。安装时使用 - -save,因为这是要在生产环境中使用的。
以前学习过React的组件如何编写,这里简单复习一下。我们作一个A页面的组件(还是接着上节课的程序继续作),我们在/app文件夹下新建一个jspang.js页面。然后引进React包,并编写一个A页面的组件。请看下面的代码。
jspang.js
import React from 'react';
export default class jspang extends React.Component{
render(){
return(
A默认页面
);
}
}
import React from 'react';
import ReactDOM from 'react-dom';
import Jspang from './jspang';
ReactDOM.render(
,
document.getElementById("app")
);
引入完成后,预览可以看到我们写的A页面的组件。通过上边基本的练习,我们有了一定经验,那么接下来我们仿照上面的方法制作两个新组件,Jspangb和JSPangc。代码如下:
jspangb.js
import React from 'react';
export default class jspangb extends React.Component{
render(){
return(
<div>B页面div>
);
}
}
jspangc.js
import React from 'react';
export default class jspangc extends React.Component{
render(){
return(
<div>C页面div>
);
}
}
````
<div class="se-preview-section-delimiter">div>
import React from ‘react’;
export default class jspangc extends React.Component{
render(){
return(
写完三个页面组件以后,我们把这三个页面都引入到index.js文件里边。
<div class="se-preview-section-delimiter">div>
import Jspang from ‘./jspang’;
import Jspangb from ‘./jspangb’;
import Jspangc from ‘./jspangc’;
引入和书写路由
三个页面都已经作好,现在就需要路由来切换他们了,先用import引入我们的路由包,这里我们用两个模块,一个是Router(我自己叫它路由器),另一个是Route(我自己叫它路由)。
<div class="se-preview-section-delimiter">div>
import {BrowserRouter as Router , Route} from ‘react-router-dom’;
然后我们改写文件,增加路由设置。
<div class="se-preview-section-delimiter">div>
ReactDOM.render(
);
<div class="se-preview-section-delimiter">div>
ReactDOM.render(
);
注意:这里的exact是精确匹配的意思,比如我们有多层路由进行嵌套时,exact可以帮助我们精确匹配到你想跳转的路由。
我们路由已经设置完毕了,但是我们现在还不能进行切换,那我们就做个切换的组件,命名为
<div class="se-preview-section-delimiter">div>
####制作Nav组件
在app文件夹下新建一个nav.js的文件,先引入React和react-router-dom两个包。
<div class="se-preview-section-delimiter">div>
import React from ‘React’;
import {NavLink} from ‘react-router-dom’;
import React from ‘React’;
import {NavLink} from ‘react-router-dom’;
编写基本的nav组件,具体解说看视频里会进行讲解。
const NavBar = () =>(
<div>
<div>
<NavLink exact to='/'>JspangaNavLink> |
<NavLink to='/Jspangb'>JspangbNavLink> |
<NavLink to='/Jspangc'>JspangcNavLink>
div>
div>
)
export default NavBar;
const NavBar = () =>(
<div>
<div>
<NavLink exact to='/'>JspangaNavLink> |
<NavLink to='/Jspangb'>JspangbNavLink> |
<NavLink to='/Jspangc'>JspangcNavLink>
div>
div>
)
export default NavBar;
组件编写完成后,引入index.js,并添加<Nav/>标签到代码里。
<div class="se-preview-section-delimiter">div>
import React from ‘react’;
import ReactDOM from ‘react-dom’;
import {BrowserRouter as Router , Route} from ‘react-router-dom’;
import Jspang from ‘./jspang’;
import Jspangb from ‘./jspangb’;
import Jspangc from ‘./jspangc’;
import Nav from ‘./nav’;
ReactDOM.render(
,
document.getElementById("app")
);
import React from ‘react’;
import ReactDOM from ‘react-dom’;
import {BrowserRouter as Router , Route} from ‘react-router-dom’;
import Jspang from ‘./jspang’;
import Jspangb from ‘./jspangb’;
import Jspangc from ‘./jspangc’;
import Nav from ‘./nav’;
ReactDOM.render(
,
document.getElementById("app")
);
“`
现在可以进行预览了,也可以顺利的切换页面内容了,说明路由已经起作用了。当然这只是路由最简单的用法,下节课我们会继续学习路由的知识。
jspang.com