@2890594972
2018-05-23T09:21:27.000000Z
字数 5780
阅读 726
react
react教学
参考地址:
http://reacttraining.cn/
http://reacttraining.cn/web/guides/quick-start
react脚手架。
npm install -g cnpm --registry=https://registry.npm.taobao.org
cnpm install -g create-react-app
create-react-app my-app
npm start
index.js——一个react项目的入口文件.
import React, { Component } from 'react';
import ReactDOM from 'react-dom';
ReactDOM.render(<h1>hello</h1>,document.getElementById('root'));
组件——
script:var App = React.createClass({});
node:
import React, { Component } from 'react';
class App extends Component{
render(){
return (
<div>hello</div>
)
}
}
App.test.js——用于测试的一个js文件。
重构我们的项目:
react路由。
npm install --save react-router-dom
如果遇到项目无法启动:重新npm install。——>npm start
使用步骤:
import {
BrowserRouter as Router,
Route,
Link
} from 'react-router-dom';
<Router>
<div>
<Link to='/'></Link>
<Link to='/about'></Link>
<Link to='/topic'></Link>
<Route exact path='/' component={ Home } />
<Route path='/about' component={ About } />
<Route path='/topic' component={ Topic} />
</div>
</Router>
Router:相当于一个组件,申明一个路由的视图。
Link:用于表示路由路径的组件。
Route:用于展示对应路径的组件。
<Route path='/:id' component={ Child }>
<Link to='/123' ></Link>
子组件中,就能得到这个id。
this.props.match.params.id
但是如果你想给它添加一个actived激活状态的样式,可以考虑使用NavLink。
示例1:
<div className='wrapper flex-box flex-col'>
<div className='flex1'>
<Route exact path='/' component={Home} />
<Route path='/about' component={About} />
<Route path='/child' component={Child} />
<Route path='/topics' component={Topics} />
<hr/>
</div>
<div className='flex-box height50'>
<NavLink exact activeClassName="selected" className='flex1 center' to='/'>主页</NavLink>
<NavLink activeClassName="selected" className='flex1 center' to='/about'>购物车</NavLink>
<NavLink activeClassName="selected" className='flex1 center' to='/child'>我的店铺</NavLink>
<NavLink activeClassName="selected" className='flex1 center' to='/topics'>个人中心</NavLink>
</div>
</div>
示例2:
<div>
<NavLink to='/123'>123</NavLink>
<NavLink className='margin-left' to='/345'>345</NavLink>
<NavLink className='margin-left' to='/mapbar_front'>mapbar_front</NavLink>
<Route path='/:id' component={Child}></Route>
</div>
//Child
import React, { Component } from 'react';
class Child extends Component{
componentDidMount(){
console.log('props',this.props);
}
render(){
return (
<div>
Child:{this.props.match.params.id}
</div>
)
}
}
export default Child;
示例3:switch
<div className='wrapper flex-box flex-col'>
<div className='flex1'>
<Switch>
<Route path='/home' component={Home} />
<Route path='/about' component={About} />
<Route path='/child' component={Child} />
<Route path='/topics' component={Topics} />
</Switch>
<hr/>
</div>
<div className='flex-box height50'>
<NavLink exact activeClassName="selected" className='flex1 center' to='/home'>主页</NavLink>
<NavLink activeClassName="selected" className='flex1 center' to='/about'>购物车</NavLink>
<NavLink activeClassName="selected" className='flex1 center' to='/child'>我的店铺</NavLink>
<NavLink activeClassName="selected" className='flex1 center' to='/topics'>个人中心</NavLink>
</div>
</div>
示例4:Redirect
<Router>
<div className='wrapper flex-box flex-col'>
<div className='flex1'>
<Switch>
<Redirect exact from='/' to='/home'/>
<Route path='/home' component={Home} />
<Route path='/about' component={About} />
<Route path='/child' component={Child} />
<Route path='/topics' component={Topics} />
</Switch>
<hr/>
</div>
<div className='flex-box height50'>
<NavLink exact activeClassName="selected" className='flex1 center' to='/home'>主页</NavLink>
<NavLink activeClassName="selected" className='flex1 center' to='/about'>购物车</NavLink>
<NavLink activeClassName="selected" className='flex1 center' to='/child'>我的店铺</NavLink>
<NavLink activeClassName="selected" className='flex1 center' to='/topics'>个人中心</NavLink>
</div>
</div>
</Router>
示例4、嵌套使用的Router
import React, { Component } from 'react';
import { BrowserRouter as Router, Link, Route } from 'react-router-dom';
import Render from './Render/Render';
import Components from './Component/Component';
import Props from './Props/Props';
class Topics extends Component{
render(){
return (
<div>
<h1>
主题列表
</h1>
<Router>
<div>
<ul>
<li><Link to='/render'>使用 React 渲染</Link></li>
<li><Link to='/component'>组件</Link></li>
<li><Link to='/props'>属性 v. 状态</Link></li>
</ul>
<Route path='/render' component={Render} />
<Route path='/component' component={Components} />
<Route path='/props' component={Props} />
</div>
</Router>
</div>
)
}
}
export default Topics;
示例5、关于嵌套路由的另一种写法:
import React, { Component } from 'react';
import { BrowserRouter as Router, Link, Route } from 'react-router-dom';
import Render from './Render/Render';
import Components from './Component/Component';
import Props from './Props/Props';
class Topics extends Component{
render(){
console.log(this.props);
return (
<div>
<h1>
主题列表
</h1>
<ul>
<li><Link to={`${this.props.match.path}/render`}>使用 React 渲染</Link></li>
<li><Link to={`${this.props.match.path}/component`}>组件</Link></li>
<li><Link to={`${this.props.match.path}/props`}>属性 v. 状态</Link></li>
</ul>
<Route path={`${this.props.match.path}/render`} component={Render} />
<Route path={`${this.props.match.path}/component`} component={Components} />
<Route path={`${this.props.match.path}/props`} component={Props} />
</div>
)
}
}
export default Topics;
react-router-dom
使用步骤:npm install --save react-router-dom (4.2);
import { BrowserRouter as Router, Link, Route } from 'react-router-dom';
最基本的使用:
import Home from './home/Home.js'
class App extends Component{
render(){
return (
<Router>
<div>
<Link to='/'>Home</Link>
<Link to='/about'>About</Link>
<Route path='/' component={ Home } />
<Route path='/about' component={ About} />
</div>
</Router>
)
}
}
NavLink组件:作用是和Link组件是一样的。
不同点是:能够添加一个activeStyle/activeClass——让当前的link展示高亮。
Switch组件:Switch组件一般包裹在Route外面,它的作用是——匹配第一个符合条件的Route。
<Switch>
<Route path='/home' component={ Home } />
<Route path='/about' component={ About } />
</Switch>
exact属性——能够使我们的Route只匹配其中的一个。
子组件中,也可以定义Router,也就是,可以实现嵌套的路由!!!
Route的另一种用法:
一般用法:<Route path='/' component={ Home } />
特殊用法:<Route to='/' children={(params)=>{
if(params){
return <h1>hello</h1>
} else {
return <h3>world</h3>
}
}} />
根据参数的不同,展示不同的视图。