8-1什么是路由,如何再react当中使用路由功能?
import React, { Component } from 'react';
import { Provider } from 'react-redux';
import { BrowserRouter, Route } from 'react-router-dom';
import Header from './common/header';
import Home from './pages/home';
import Detail from './pages/detail/loadable.js';
import Login from './pages/login';
import Write from './pages/write';
import store from './store';
class App extends Component {
render() {
return (
<Provider store={store}>
<BrowserRouter>
<div>
<Header />
<Route path='/' exact component={Home}></Route>
<Route path='/login' exact component={Login}></Route>
<Route path='/write' exact component={Write}></Route>
<Route path='/detail/:id' exact component={Detail}></Route>
</div>
</BrowserRouter>
</Provider>
);
}
}
export default App;
数据存储再store当中,数据是怎么变化是由reducer
8-4首页文章列表制作
List.js
import React, { PureComponent } from 'react';
import { ListItem, ListInfo, LoadMore } from '../style';
import { connect } from 'react-redux';
import { actionCreators } from '../store';
import { Link } from 'react-router-dom';
class List extends PureComponent {
render() {
const { list, getMoreList, page } = this.props;
return (
<div>
{
list.map((item, index) => {
return (
<Link key={index} to={'/detail/' + item.get('id')}>
<ListItem >
<img alt='' className='pic' src={item.get('imgUrl')} />
<ListInfo>
<h3 className='title'>{item.get('title')}</h3>
<p className='desc'>{item.get('desc')}</p>
</ListInfo>
</ListItem>
</Link>
);
})
}
<LoadMore onClick={() => getMoreList(page)}>更多文字</LoadMore>
</div>
)
}
}
const mapState = (state) => ({
list: state.getIn(['home', 'articleList']),
page: state.getIn(['home', 'articlePage'])
});
const mapDispatch = (dispatch) => ({
getMoreList(page) {
dispatch(actionCreators.getMoreList(page))
}
})
export default connect(mapState, mapDispatch)(List);
8-5首页推荐部分代码编写
import React, { PureComponent } from 'react';
import { connect } from 'react-redux';
import { RecommendWrapper, RecommendItem } from '../style';
class Recommend extends PureComponent {
render() {
return (
<RecommendWrapper>
{
this.props.list.map((item) => {
return <RecommendItem imgUrl={item.get('imgUrl')} key={item.get('id')}/>
})
}
</RecommendWrapper>
)
}
}
const mapState = (state) => ({
list: state.getIn(['home', 'recommendList'])
})
export default connect(mapState, null)(Recommend);
8-6首页异步数据获取
数据从接口获取的
connect组件action组件和store组件做链接的
8-7异步操作代码优化
8-8实现加载更多的功能
8-9返回顶部功能实现
8-10首页性能优化以及路由跳转
首页的每一个组件都调用了connect和store链接
只要store发生了改变就会重新渲染,render函数需要被重新执行,和组件无关的代码都会被执行的,
shouldComponentUpdate(),purecompoennt
使用immutable.js管理数据