@@ -5,14 +5,9 @@ import { merge } from 'ramda'
5
5
import { SITE_URL } from '@/config'
6
6
import { ROUTE } from '@/constant'
7
7
8
- import {
9
- getJwtToken ,
10
- makeGQClient ,
11
- parseURL ,
12
- ssrAmbulance ,
13
- parseTheme ,
14
- } from '@/utils'
15
- import initRootStore from '@/stores/init'
8
+ import { getJwtToken , makeGQClient , ssrAmbulance , parseTheme } from '@/utils'
9
+
10
+ import { useStore } from '@/stores/init2'
16
11
17
12
import GlobalLayout from '@/containers/GlobalLayout'
18
13
import InterviewContent from '@/containers/content/InterviewContent'
@@ -40,66 +35,54 @@ async function fetchData(props, opt) {
40
35
}
41
36
}
42
37
43
- export default class InterviewPage extends React . Component {
44
- static async getInitialProps ( props ) {
45
- const { mainPath, subPath} = parseURL ( props )
46
- let resp
47
- try {
48
- resp = await fetchData ( props )
49
- } catch ( { response :{ errors} } ) {
50
- if ( ssrAmbulance . hasLoginError ( errors ) ) {
51
- resp = await fetchData ( props , { realname :false } )
52
- } else {
53
- return { statusCode :404 , target :subPath }
54
- }
55
- }
56
-
57
- const { sessionState, subscribedCommunities} = resp
58
-
59
- return {
60
- theme :{
61
- curTheme :parseTheme ( sessionState ) ,
62
- } ,
63
- account :{
64
- user :sessionState . user || { } ,
65
- isValidSession :sessionState . isValid ,
66
- userSubscribedCommunities :subscribedCommunities ,
67
- } ,
68
- route :{ mainPath, subPath :ROUTE . INTERVIEW } ,
38
+ export async function getServerSideProps ( props ) {
39
+ let resp
40
+ try {
41
+ resp = await fetchData ( props )
42
+ } catch ( { response :{ errors} } ) {
43
+ if ( ssrAmbulance . hasLoginError ( errors ) ) {
44
+ resp = await fetchData ( props , { realname :false } )
69
45
}
70
46
}
71
47
72
- constructor ( props ) {
73
- super ( props )
74
- const store = props . statusCode
75
- ?initRootStore ( )
76
- :initRootStore ( { ...props } )
77
-
78
- this . store = store
48
+ const { sessionState, subscribedCommunities} = resp
49
+ const initProps = {
50
+ theme :{
51
+ curTheme :parseTheme ( sessionState ) ,
52
+ } ,
53
+ account :{
54
+ user :sessionState . user || { } ,
55
+ isValidSession :sessionState . isValid ,
56
+ userSubscribedCommunities :subscribedCommunities ,
57
+ } ,
79
58
}
80
59
81
- render ( ) {
82
- const { statusCode, target} = this . props
60
+ return {
61
+ props :{ errorCode :null , namespacesRequired :[ 'general' ] , ...initProps } ,
62
+ }
63
+ }
83
64
84
- const seoConfig = {
85
- url :`${ SITE_URL } /${ ROUTE . INTERVIEW } ` ,
86
- title :'coderplanets 社区' ,
87
- description :'最性感的开发者社区' ,
88
- }
65
+ const InterviewPage = props => {
66
+ const store = useStore ( props )
89
67
90
- return (
91
- < Provider store = { this . store } >
92
- < GlobalLayout
93
- noSidebar
94
- metric = "default"
95
- page = { ROUTE . INTERVIEW }
96
- seoConfig = { seoConfig }
97
- errorCode = { statusCode }
98
- errorPath = { target }
99
- >
100
- < InterviewContent />
101
- </ GlobalLayout >
102
- </ Provider >
103
- )
68
+ const seoConfig = {
69
+ url :`${ SITE_URL } /${ ROUTE . INTERVIEW } ` ,
70
+ title :'面经 | coderplanets' ,
71
+ description :'面试题库,面试经验分享交流' ,
104
72
}
73
+
74
+ return (
75
+ < Provider store = { store } >
76
+ < GlobalLayout
77
+ noSidebar
78
+ metric = "default"
79
+ page = { ROUTE . INTERVIEW }
80
+ seoConfig = { seoConfig }
81
+ >
82
+ < InterviewContent />
83
+ </ GlobalLayout >
84
+ </ Provider >
85
+ )
105
86
}
87
+
88
+ export default InterviewPage