index.js 3.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. import React, {PureComponent} from "react";
  2. import {connect} from "react-redux";
  3. import axios from "axios";
  4. import {SearchWrapper, MainWrapper} from './style';
  5. import CatList from "../../components/List";
  6. import PagInation from '../../components/PagInation';
  7. class Search extends PureComponent {
  8. constructor(props) {
  9. super(props);
  10. this.state = {
  11. key: props.match.params.key,
  12. finished: false,
  13. loading: true,
  14. page: 1,
  15. list: []
  16. };
  17. this.getList = this.getList.bind(this);
  18. }
  19. render() {
  20. const {list, page, finished, loading, key} = this.state;
  21. return (
  22. <SearchWrapper>
  23. <div className='pattern-center-blank'/>
  24. <MainWrapper>
  25. <header className="page-header">
  26. <h1 className="page-title">{`搜索结果:${key}`}</h1>
  27. </header>
  28. <CatList list={list}/>
  29. <PagInation page={page} id={key} finished={finished} loading={loading} getList={this.getList}/>
  30. </MainWrapper>
  31. </SearchWrapper>
  32. )
  33. }
  34. componentDidMount() {
  35. this.getList(1, this.state.key, true);
  36. }
  37. getList(page, key, override) {
  38. this.setState({loading: true});
  39. axios.get('/posts/posts/v1/list', {
  40. params: {
  41. page: page,
  42. size: 10,
  43. keywords: key
  44. }
  45. }).then((res) => {
  46. if (res.success === 1) {
  47. let current = res.pageInfo.page * res.pageInfo.size;
  48. let total = res.pageInfo.total;
  49. const data = res.models;
  50. const Img = this.props.ListImg;
  51. let arr = [];
  52. data.forEach((item) => {
  53. arr.push({
  54. id: item.id,
  55. title: item.title,
  56. thumbnail: item.thumbnail || Img[this.getrand(0, Img.length - 1)].img,
  57. comments: item.comments,
  58. status: item.status,
  59. summary: item.summary,
  60. views: item.views,
  61. createTime: item.createTime,
  62. syncStatus: item.syncStatus,
  63. author: item.author,
  64. categoryName: item.categoryName
  65. })
  66. });
  67. this.setState((prevState) => {
  68. return {
  69. list: override ? arr : [...prevState.list, ...arr],
  70. page: page + 1,
  71. loading: false
  72. }
  73. });
  74. if (current > total) {
  75. this.setState({
  76. finished: true
  77. })
  78. }
  79. }
  80. });
  81. }
  82. getrand(m, n) {
  83. return Math.floor(Math.random() * (n - m + 1)) + m;
  84. };
  85. }
  86. const mapState = (state) => {
  87. return {
  88. ListImg: state.getIn(['image', 'ListImg'])
  89. }
  90. };
  91. export default connect(mapState)(Search)