index.tsx 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. import { get } from "libs/http";
  2. import useGet from "libs/hooks/useGet";
  3. import NovelItem from "components/NovelItem";
  4. const Home = () => {
  5. const { data } = useGet<HomeData>("/api/list");
  6. if (!data) return null;
  7. const { completed, on_going, rands } = data.data;
  8. return (
  9. <main className="container">
  10. {rands ? (
  11. <>
  12. <h2 className="novel-title">Ranking</h2>
  13. <ul className="novel-list">
  14. {rands.map((item) => (
  15. <NovelItem
  16. key={item.uri}
  17. slug={item.uri}
  18. img={item.img}
  19. name={item.name}
  20. />
  21. ))}
  22. </ul>
  23. </>
  24. ) : null}
  25. {on_going ? (
  26. <>
  27. <h2 className="novel-title">Updating</h2>
  28. <ul className="novel-list">
  29. {on_going.map((item) => (
  30. <NovelItem
  31. key={item.uri}
  32. slug={item.uri}
  33. img={item.img}
  34. name={item.name}
  35. />
  36. ))}
  37. </ul>
  38. </>
  39. ) : null}
  40. {completed ? (
  41. <>
  42. <h2 className="novel-title">Completed</h2>
  43. <ul className="novel-list">
  44. {completed.map((item) => (
  45. <NovelItem
  46. key={item.uri}
  47. slug={item.uri}
  48. img={item.img}
  49. name={item.name}
  50. />
  51. ))}
  52. </ul>
  53. </>
  54. ) : null}
  55. </main>
  56. );
  57. };
  58. export async function getServerSideProps() {
  59. const data = await get(`/api/list`);
  60. return {
  61. props: {
  62. fallback: {
  63. "/api/list": data,
  64. },
  65. },
  66. };
  67. }
  68. export default Home;