Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
DCloud
unidocs-uni-app-x-zh
提交
9cd3f3c0
U
unidocs-uni-app-x-zh
项目概览
DCloud
/
unidocs-uni-app-x-zh
通知
144
Star
2
Fork
33
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
9
列表
看板
标记
里程碑
合并请求
11
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
U
unidocs-uni-app-x-zh
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
9
Issue
9
列表
看板
标记
里程碑
合并请求
11
合并请求
11
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
提交
9cd3f3c0
编写于
2月 01, 2024
作者:
雪洛
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
docs: 更新web端开发指南
上级
1964ce3b
变更
1
显示空白变更内容
内联
并排
Showing
1 changed file
with
88 addition
and
3 deletion
+88
-3
docs/web/README.md
docs/web/README.md
+88
-3
未找到文件。
docs/web/README.md
浏览文件 @
9cd3f3c0
...
@@ -49,7 +49,7 @@ export default {
...
@@ -49,7 +49,7 @@ export default {
</
script
>
</
script
>
```
```
### vue相关属性类型问题
### vue
实例
相关属性类型问题
为保证运行性能,app安卓端部分属性(如:$data、$refs)被转为了Map类型(安卓端map支持使用下标访问),而web端仍是普通对象或proxy。为保证多端代码一致,在使用这些属性时可以统一为下标访问。
为保证运行性能,app安卓端部分属性(如:$data、$refs)被转为了Map类型(安卓端map支持使用下标访问),而web端仍是普通对象或proxy。为保证多端代码一致,在使用这些属性时可以统一为下标访问。
...
@@ -71,9 +71,63 @@ export default {
...
@@ -71,9 +71,63 @@ export default {
</
script
>
</
script
>
```
```
### ComponentPublicInstance类型
目前已知组件使用emits会导致this不能直接传递给ComponentPublicInstance类型,需要as一下。
```
ts
function
log
(
ins
:
ComponentPublicInstance
)
{
console
.
log
(
ins
);
}
export
default
{
emits
:
[
'
change
'
,
'
input
'
],
methods
:
{
buttonClick
()
{
log
(
this
as
ComponentPublicInstance
)
}
}
}
```
如下为进阶说明,可以不看
我们在代码中用到的ComponentPublicInstance为省略泛型的写法,最终推导出的ComponentPublicInstance类型为:
```
ts
// 此处为方便说明,省略了很多属性、简化了写法
type
ComponentPublicInstance
=
{
$emit
:
(
event
:
string
,
...
args
:
any
[])
=>
void
}
```
对于使用了emits的组件,最终推导出来的this对应的类型为:
```
ts
// 此处为方便说明,省略了很多属性、简化了写法
type
XxxComponentPublicInstance
=
{
$emit
:
(
event
:
'
change
'
|
'
input
'
,
...
args
:
any
[])
=>
void
}
```
在将XxxComponentPublicInstance类型的this值赋值给ComponentPublicInstance类型的参数时,由于$emit类型无法兼容导致无法会报出错误。
下面我们只看$emit的类型
```
ts
type
ComponentPublicInstanceEmit
=
(
event
:
string
,
...
args
:
any
[])
=>
void
type
XxxComponentPublicInstanceEmit
=
(
event
:
'
change
'
|
'
input
'
,
...
args
:
any
[])
=>
void
```
对于ComponentPublicInstanceEmit类型的函数A来说,event参数可以接收任意字符串,如果将其赋值为只能接收'change' | 'input'作为event参数的函数B,这时候用户如果将event参数设为'click'则函数B无法处理,而函数A的类型定义又可以接收'click',所以ts并不允许这种行为。
但是反过来则是可以的XxxComponentPublicInstanceEmit类型的函数A可以被重新赋值为ComponentPublicInstanceEmit类型的函数。
简单来说ts在比较函数参数是否兼容时使用逆变(contravariance)而非协变(covariance),这两个名词定义比较复杂,结合上述示例理解即可。
### 注意事项
### 注意事项
-
data内$开头的属性不可直接使用
`this.$xxx`
访问,需要使用
`this.$data['$xxx']`
,这是vue的规范。目前安卓端可以使用this.xxx访问是Bug而非特性,请勿使用此特性。
-
data内$开头的属性不可直接使用
`this.$xxx`
访问,需要使用
`this.$data['$xxx']`
,这是vue的规范。目前安卓端可以使用this.
$
xxx访问是Bug而非特性,请勿使用此特性。
-
安卓端由于kotlin特性组件内部使用组件data内定义的属性时this可以省略,请勿在web端使用此特性。
-
安卓端由于kotlin特性组件内部使用组件data内定义的属性时this可以省略,请勿在web端使用此特性。
-
web端由于是一个单页应用,使用
`$root`
会获取应用根组件,而不是页面根组件。而安卓端是多页应用,
`$root`
获取的是页面根组件。
-
web端由于是一个单页应用,使用
`$root`
会获取应用根组件,而不是页面根组件。而安卓端是多页应用,
`$root`
获取的是页面根组件。
-
web端使用
`$parent`
会获取父组件(含内置组件),安卓端只会获取父级非内置组件,web端后续会调整,请勿利用此特性。
-
web端使用
`$parent`
会获取父组件(含内置组件),安卓端只会获取父级非内置组件,web端后续会调整,请勿利用此特性。
...
@@ -172,15 +226,46 @@ console.log(result instanceof Obj) // true
...
@@ -172,15 +226,46 @@ console.log(result instanceof Obj) // true
例如定义可选参数时应使用下面的写法:
例如定义可选参数时应使用下面的写法:
```
ts
```
ts
function
test
(
anything
?:
any
|
null
)
{
function
test
(
anything
?:
any
|
null
)
{
// 注意带上问号
console
.
log
(
anything
)
console
.
log
(
anything
)
}
}
```
```
同样如果属性在类型中是可选值也需要使用下面的写法
```
ts
type
Options
=
{
num
?:
number
|
null
}
```
### void/undefined类型
### void/undefined类型
为保证多端统一应尽量避免使用undefined、void类型,可以使用null代替。如果需要判断是否为null建议使用两个等号,不要使用三个等号(此处使用了js的特性
`undefined == null`
结果为true)。
为保证多端统一应尽量避免使用undefined、void类型,可以使用null代替。如果需要判断是否为null建议使用两个等号,不要使用三个等号(此处使用了js的特性
`undefined == null`
结果为true)。
### String、Number、Boolean类型
ts内string、number、boolean类型与String、Number、Boolean类型并不相同。
```
ts
let
str1
:
String
=
'
1
'
let
str2
:
string
=
'
2
'
str1
=
str2
// 不报错
str2
=
str1
// 报错 Type 'String' is not assignable to type 'string'
```
尽量使用string、number、boolean类型替代String、Number、Boolean类型。
### import type@import-type
由于uts会为as为某些类型的对象字面量创建这个类型对应的实例,所以经常会存在一些类型引入后是作为值使用而不是作为类型使用。应尽量不要使用
`import type`
用法,避免编译结果出错。
```
ts
import
type
{
TypeA
}
from
'
./type
'
// 避免使用
import
{
TypeA
}
from
'
./type
'
// 推荐用法
```
## css
## css
### 默认样式
### 默认样式
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录