Skip to content

Commit 50ed2fb

Browse files
committed
feat: 🔥 支持devtool,增加工具函数
1 parent 6368f7f commit 50ed2fb

File tree

7 files changed

+810
-550
lines changed

7 files changed

+810
-550
lines changed

docs/guide/api.md

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -111,6 +111,26 @@ class Foo extends VueComponent {
111111

112112
在HOC组件中使用这个方法可以转发真正的ref
113113

114+
## mergeRefs
115+
116+
支持多个不同类型的ref在同一个元素或组件上面
117+
118+
```typescript jsx
119+
import { mergeRefs } from './component'
120+
121+
class App extends VueComponent {
122+
@Link() aa?: any
123+
124+
cc = shallowRef()
125+
126+
dd?: any
127+
128+
render() {
129+
return <div ref={mergeRefs('aa', this.cc, (v) => this.dd = v)}></div>
130+
}
131+
}
132+
```
133+
114134

115135
# 类型
116136

example/main.tsx

Lines changed: 46 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import '@abraham/reflection'
2-
import { Component, Hook, Mut, VueComponent } from 'vue3-oop'
3-
import { createApp } from 'vue'
2+
import { Component, Hook, Link, mergeRefs, Mut, VueComponent } from 'vue3-oop'
3+
import { createApp, shallowRef } from 'vue'
44
import 'ant-design-vue/dist/antd.css'
55
import { ConfigProvider, Layout, Menu } from 'ant-design-vue'
66
import { RouterLink, RouterView } from 'vue-router'
@@ -9,41 +9,76 @@ import { routes } from './router/routes'
99
import zhCN from 'ant-design-vue/lib/locale/zh_CN'
1010
import { setup } from './setup'
1111

12+
class Child extends VueComponent {
13+
@Hook('Mounted')
14+
mounted() {
15+
console.log('child mounted')
16+
}
17+
render() {
18+
console.log('child render')
19+
return <div>child</div>
20+
}
21+
}
22+
1223
@Component({ providers: [RouterStartService] })
1324
class App extends VueComponent {
25+
constructor(private a: RouterStartService) {
26+
super()
27+
}
28+
1429
@Mut() collapsed = false
1530

31+
cc = shallowRef()
32+
1633
@Hook('ErrorCaptured')
1734
error(...args: any[]) {
1835
console.log(args)
1936
}
2037

38+
@Link() aaa?: any
39+
40+
@Hook('Mounted')
41+
mounted() {
42+
console.log(this.aaa, this.cc)
43+
}
44+
2145
render() {
2246
return (
2347
<ConfigProvider locale={zhCN}>
2448
<Layout style={{ minHeight: '100vh' }}>
2549
<Layout.Sider v-model:collapsed={this.collapsed} collapsible>
2650
<h2
51+
ref={mergeRefs('aaa', this.cc)}
2752
onClick={() => {
2853
throw new Error('hahaha')
2954
}}
3055
style={{ color: '#fff', textAlign: 'center', lineHeight: '40px' }}
3156
>
3257
VUE 示例
3358
</h2>
59+
<Child
60+
abc={this.collapsed}
61+
ref={(value, refs) => {
62+
console.log(value, refs)
63+
}}
64+
></Child>
3465
<Menu theme={'dark'} mode={'inline'}>
3566
{routes.map((r) => {
3667
return (
3768
<Menu.SubMenu title={r.meta?.title} key={r.path}>
38-
{r.children?.map((i) => {
39-
return (
40-
<Menu.Item key={i.path}>
41-
<RouterLink to={i.path} style={{ display: 'block' }}>
42-
{i.meta?.title}
43-
</RouterLink>
44-
</Menu.Item>
45-
)
46-
})}
69+
{'children' in r &&
70+
r.children.map((i) => {
71+
return (
72+
<Menu.Item key={i.path}>
73+
<RouterLink
74+
to={i.path}
75+
style={{ display: 'block' }}
76+
>
77+
{i.meta?.title}
78+
</RouterLink>
79+
</Menu.Item>
80+
)
81+
})}
4782
</Menu.SubMenu>
4883
)
4984
})}

package.json

Lines changed: 19 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
11
{
22
"name": "vue3-oop",
33
"version": "0.6.0",
4-
"main": "dist/vue3-oop.cjs.js",
5-
"module": "dist/vue3-oop.es.js",
4+
"main": "dist/vue3-oop.js",
5+
"module": "dist/vue3-oop.mjs",
66
"types": "types/index.d.ts",
77
"exports": {
88
".": {
9-
"import": "./dist/vue3-oop.es.js",
10-
"require": "./dist/vue3-oop.cjs.js"
9+
"import": "./dist/vue3-oop.mjs",
10+
"require": "./dist/vue3-oop.js"
1111
}
1212
},
1313
"scripts": {
@@ -56,37 +56,37 @@
5656
"@release-it/conventional-changelog": "^5.0.0",
5757
"@types/lodash-es": "^4.17.6",
5858
"@types/markdown-it": "^12.2.3",
59-
"@types/node": "^18.0.0",
59+
"@types/node": "^18.0.4",
6060
"@types/prettier": "^2.6.3",
61-
"@typescript-eslint/eslint-plugin": "^5.29.0",
62-
"@typescript-eslint/parser": "^5.29.0",
63-
"@vitejs/plugin-vue": "^2.3.3",
64-
"@vitest/ui": "^0.16.0",
65-
"@vue/test-utils": "2.0.1",
61+
"@typescript-eslint/eslint-plugin": "^5.30.6",
62+
"@typescript-eslint/parser": "^5.30.6",
63+
"@vitejs/plugin-vue": "^3.0.0",
64+
"@vitest/ui": "^0.18.0",
65+
"@vue/test-utils": "2.0.2",
6666
"@vue3-oop/plugin-vue-jsx": "^1.4.0",
67-
"ant-design-vue": "^3.2.9",
67+
"ant-design-vue": "^3.2.10",
6868
"autobind-decorator": "^2.4.0",
6969
"c8": "^7.11.3",
70-
"eslint": "^8.18.0",
70+
"eslint": "^8.19.0",
7171
"eslint-config-prettier": "^8.5.0",
72-
"eslint-plugin-prettier": "^4.0.0",
73-
"happy-dom": "^5.3.2",
72+
"eslint-plugin-prettier": "^4.2.1",
73+
"happy-dom": "^6.0.3",
7474
"injection-js": "^2.4.0",
7575
"lint-staged": "^13.0.3",
7676
"lodash-es": "^4.17.21",
7777
"prettier": "^2.7.1",
78-
"release-it": "^15.1.0",
78+
"release-it": "^15.1.1",
7979
"rimraf": "^3.0.2",
8080
"sass": "^1.53.0",
8181
"tslib": "^2.4.0",
8282
"typescript": "^4.7.4",
83-
"vite": "^2.9.12",
84-
"vite-plugin-dts": "^1.2.0",
83+
"vite": "^3.0.0",
84+
"vite-plugin-dts": "^1.3.0",
8585
"vite-tsconfig-paths": "^3.5.0",
8686
"vitepress": "1.0.0-alpha.4",
87-
"vitest": "^0.16.0",
87+
"vitest": "^0.18.0",
8888
"vue": "^3.2.37",
89-
"vue-router": "^4.0.16"
89+
"vue-router": "^4.1.2"
9090
},
9191
"commitlint": {
9292
"extends": [

0 commit comments

Comments
 (0)