@@ -3,10 +3,11 @@ import TheHeader from '@components/Header'
33import TheFooter from '@components/Footer'
44import Blog from '@components/Blog'
55import Axios from 'axios'
6- import { Layout , Row , Col , Pagination , Spin } from 'antd'
6+ import { Layout , Row , Col , Pagination } from 'antd'
77import { connect } from 'react-redux'
88import { loadBlogsByPage } from '../redux/store'
99import config from '../../config.json'
10+ import { CSSTransition } from 'react-transition-group'
1011
1112const { Content } = Layout
1213
@@ -18,7 +19,7 @@ class Index extends Component {
1819 constructor ( props ) {
1920 super ( props )
2021 this . state = {
21- loading : true
22+ loaded : false
2223 }
2324 }
2425
@@ -29,19 +30,18 @@ class Index extends Component {
2930 }
3031
3132 getBlogs ( page ) {
32- this . setState ( { loading : true } )
3333 Axios . get ( `${ config . server_url } /blog/getblogs/${ page } ` )
34- . then ( res => {
35- res . data . blogs . map ( blog => {
36- blog . time = blog . time . split ( 'T' ) [ 0 ]
37- } )
38- this . setState ( { loading : false } )
39- this . props . loadBlogsByPage ( res . data )
34+ . then ( res => {
35+ res . data . blogs . map ( blog => {
36+ blog . time = blog . time . split ( 'T' ) [ 0 ]
4037 } )
38+ this . setState ( { loaded : true } )
39+ this . props . loadBlogsByPage ( res . data )
40+ } )
4141 }
42-
42+
4343 handlePageChange ( page ) {
44-
44+ this . setState ( { loaded : false } )
4545 this . getBlogs ( page - 1 )
4646 }
4747
@@ -51,11 +51,16 @@ class Index extends Component {
5151 < TheHeader > </ TheHeader >
5252 < Content >
5353 < Row >
54- < Col offset = { 4 } span = { 12 } >
55- < Spin spinning = { this . state . loading } style = { { minHeight : '1000 px' } } >
56- { this . props . blogsToShow ? this . props . blogsToShow . map ( blog => < Blog key = { blog . id } { ...blog } isPriview = { true } /> ) : null }
57- </ Spin >
54+ < CSSTransition
55+ in = { this . state . loaded }
56+ timeout = { 2000 }
57+ classNames = 'fade'
58+ appear = { true }
59+ >
60+ < Col offset = { 4 } span = { 12 } style = { { minHeight : '600px' } } >
61+ { this . props . blogsToShow ? this . props . blogsToShow . map ( blog => < Blog key = { blog . id } { ...blog } isPriview = { true } /> ) : < div > </ div > }
5862 </ Col >
63+ </ CSSTransition >
5964 </ Row >
6065 < Row style = { { margin : '20px 0 50px' } } >
6166 < Col offset = { 4 } span = { 12 } style = { { padding : '20px 0' , background : '#fff' , display : 'flex' , justifyContent : 'center' } } >
@@ -64,6 +69,34 @@ class Index extends Component {
6469 </ Row >
6570 </ Content >
6671 < TheFooter > </ TheFooter >
72+ < style jsx > { `
73+ /* enter 为入场前的瞬间, appear指页面第一次加载前的瞬间(auto) */
74+ .fade-enter, .fade-appear {
75+ opacity: 0;
76+ }
77+ /* enter-active 为入场到入场结束的过程 appear-active 为页面第一次自动执行 */
78+ .fade-enter-active, .fade-appear-active {
79+ opacity: 1;
80+ transition: opacity 1s ease-in;
81+ }
82+ /* 入场动画执行完毕后, 保持状态 */
83+ .fade-enter-done {
84+ opacity: 1;
85+ }
86+ /*出厂前的瞬间 */
87+ .fade-exit {
88+ opacity: 1;
89+ }
90+ /*出场到出场结束的过程 */
91+ .fade-exit-active {
92+ opacity: 0;
93+ transition: opacity 1s ease-in;
94+ }
95+ /*出场动画执行后保持状态 */
96+ .fade-exit-done {
97+ opacity: 0;
98+ }
99+ ` } </ style >
67100 </ Layout >
68101 )
69102 }
0 commit comments