Skip to content

Commit 51cc3c1

Browse files
committed
feat: add example
1 parent ba14886 commit 51cc3c1

File tree

7 files changed

+35
-44
lines changed

7 files changed

+35
-44
lines changed

.eslintrc.json

+1
Original file line numberDiff line numberDiff line change
@@ -132,6 +132,7 @@
132132
"no-alert": "off",
133133
"no-plusplus": "off",
134134
"no-await-in-loop": "off",
135+
"no-new": "off",
135136
"no-shadow": [
136137
"off",
137138
{

package.json

+2-2
Original file line numberDiff line numberDiff line change
@@ -9,14 +9,14 @@
99
"docs"
1010
],
1111
"scripts": {
12-
"dev": "node ./build/start.js",
12+
"start": "node ./build/start.js",
13+
"dev": "npm run client:dev & node ./dist/server/app",
1314
"client:dev": "node ./build/client/dev-server.js",
1415
"server:dev": "node ./build/server/dev-server.js",
1516
"build": "node ./build/client/prod-build.js",
1617
"client:build": "node ./build/client/prod-build.js",
1718
"server:build": "cross-env NODE_ENV=production webpack --config ./build/server/webpack.server.config.js",
1819
"server-dev:build": "cross-env NODE_ENV=development node ./build/server/dev-build.js",
19-
"start": "node ./dist/server/app.js",
2020
"mock": "oock -c ./mock/config.js ",
2121
"gc": "git-cz",
2222
"stylelint:fix": "stylelint './src/**/*.less' --syntax less --fix",

src/client/modules/home/index.less

+1
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,7 @@ html {
7979

8080
.click-btn {
8181
margin-top: 20px;
82+
margin-left: 20px;
8283
}
8384

8485
img {

src/client/modules/home/index.tsx

+24-13
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,15 @@
1-
import React from 'react'
2-
import { Link } from 'react-router-dom'
1+
import React, { useState } from 'react'
32
import style from './index.less'
43
import isConnect from '@/library/isConnect'
54
import Logo from './logo.jpg'
65

7-
export const Home = () => {
6+
export interface IUser {
7+
name: string
8+
id: string
9+
}
10+
export const Home = (props: any) => {
11+
const { initialData } = props
12+
const [user, setUser] = useState<IUser>(initialData)
813
const handleClick = () => {
914
alert('handleClick')
1015
}
@@ -34,33 +39,39 @@ export const Home = () => {
3439
</div>
3540
<div
3641
role="button"
37-
tabIndex={0}
3842
className="button--green click-btn"
43+
tabIndex={0}
3944
onClick={handleClick}
4045
onKeyDown={handleClick}
4146
>
4247
点一点
4348
</div>
49+
<span className="button--green click-btn">作者:{user.name}</span>
50+
<span className="button--green click-btn">ID:{user.id}</span>
4451
</div>
4552
</div>
4653
)
4754
}
48-
// ! 约定 服务端会调用这个方法 ===> 相当于是生命周期
49-
// 这一块可能会设计到把redux的操作
5055
Home.asyncData = ({ store }: any) => {
51-
// TODO 在这个生命周期调用getInitialData
52-
store.dispatch.home.getInitialData()
56+
// 模拟异步请求
57+
const data = {
58+
name: 'vnues',
59+
id: '@1213'
60+
}
61+
// TODO 这里改动 服务端没有做更新
62+
store.dispatch.home.setUser(data)
63+
return new Promise(resolve => {
64+
setTimeout(() => {
65+
resolve(data)
66+
}, 2000)
67+
})
5368
}
5469

5570
const mapStateToProps = (state: any) => ({
5671
home: state.home
5772
})
5873

59-
const mapDispatchToProps = () => ({
60-
getInitialData: (dispatch: any) => {
61-
dispatch.home.getInitialData()
62-
}
63-
})
74+
const mapDispatchToProps = () => ({})
6475

6576
export default isConnect(
6677
{

src/client/store/home/index.ts

+6-28
Original file line numberDiff line numberDiff line change
@@ -1,41 +1,19 @@
1+
import { IUser } from '@/modules/home'
12
import { createModel } from '@rematch/core'
23

34
interface HomeState {
4-
players: any[]
5+
users: IUser
56
}
67

78
export default createModel<any>()({
89
state: {
9-
players: [1, 2, 3, 99]
10+
users: {}
1011
} as HomeState,
1112
reducers: {
12-
SET_PLAYERS: (state: HomeState, players: HomeState[]) => ({
13+
setUser: (state: HomeState, users: IUser) => ({
1314
...state,
14-
players
15+
users
1516
})
1617
},
17-
effects: (dispatch: any) => {
18-
const { home } = dispatch
19-
return {
20-
async getPlayers(): Promise<any> {
21-
const response = await fetch('https://www.balldontlie.io/api/v1/players')
22-
const { data }: { data: HomeState[] } = await response.json()
23-
home.SET_PLAYERS(data)
24-
},
25-
// ! 约定的方法
26-
getInitialData() {
27-
return new Promise(resolve => {
28-
// 延迟 500ms 返回数据
29-
setTimeout(() => {
30-
const data = {
31-
test: '123'
32-
}
33-
resolve(data)
34-
// 更新状态
35-
home.SET_PLAYERS([800, 800, 800])
36-
}, 500)
37-
})
38-
}
39-
}
40-
}
18+
effects: (dispatch: any) => ({})
4119
})

src/server/app/index.ts

-1
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@ const app = new Koa()
1010
// 引入代理模块
1111
const options = {
1212
targets: {
13-
// eslint-disable-next-line @typescript-eslint/naming-convention
1413
'/__hmr': {
1514
target: 'http://localhost:8080',
1615
changeOrigin: true

src/server/middlewares/genHtml.tsx

+1
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ export default async function genHtml(
3333
if (fetchDataFn) {
3434
// 更新 state
3535
fetchResult = await fetchDataFn({ store })
36+
console.log(fetchResult)
3637
}
3738
}
3839

0 commit comments

Comments
 (0)