大家好,我是小杨。刚开始学小程序时,我老想着怎么弄些花里胡哨的UI库。后来才发现,微信官方提供的"积木盒子"------也就是原生组件,已经足够强大又好用。用好它们,你就能快速搭出大部分标准界面,性能好还不用担心兼容性。
今天,我就带大家打开这个"积木盒子",盘点几个最常用也最核心的原生组件,并分享一些我实战中用到的代码片段。
一、视图容器类:你的布局"脚手架"
这类组件就像盖房子时的钢筋骨架,负责页面的整体结构。
1. view
:万金油容器
它就是最基础的<div>
,几乎无处不在。
html
<!-- 用view来划分区域 -->
<view class="header">
<text>我是顶部</text>
</view>
<view class="content">
<text>我是内容区</text>
</view>
<view class="footer">
<text>我是底部</text>
</view>
2. scroll-view
:会滚动的区域
当内容超出屏幕时,它就派上用场了。我常用它来做横向导航或超长列表。
html
<!-- 一个横向滚动的标签栏 -->
<scroll-view class="nav-scroll" scroll-x="true">
<view class="nav-item">推荐</view>
<view class="nav-item">热点</view>
<view class="nav-item">科技</view>
<view class="nav-item">体育</view>
<!-- 可以放很多个 -->
</scroll-view>
css
/* 对应的样式 */
.nav-scroll {
white-space: nowrap; /* 防止换行 */
width: 100%;
}
.nav-item {
display: inline-block;
padding: 10px 20px;
margin-right: 10px;
background-color: #f0f0f0;
}
二、基础内容类:信息的"传递员"
text
:不只是显示文字
千万别小看<text>
,它和HTML里的<span>
可不一样,它是唯一的文本节点 。意思是,只有包在<text>
里的文字才能被长按选中!
html
<view>
我是一段普通内容,不能被长按选中。
<text class="highlight" selectable="true">但我这段文字可以!试试长按我。</text>
</view>
三、表单组件:和用户"对话"的桥梁
这是交互的核心,我挑几个最常用的来说。
1. button
:别忘了它的开放能力
按钮除了点击,还能通过open-type
获取微信的超级能力。
html
<button type="primary" bindtap="handleSimpleClick">普通点击</button>
<button open-type="getUserInfo" bindgetuserinfo="onGetUserInfo">
获取微信用户信息
</button>
<button open-type="share">触发转发</button>
javascript
// 对应的.js逻辑
Page({
handleSimpleClick: function() {
console.log('按钮被点击了');
},
onGetUserInfo: function(event) {
// 这里可以拿到用户的昵称、头像等信息
const userInfo = event.detail.userInfo;
if (userInfo) {
this.setData({ nickname: userInfo.nickName });
}
}
})
2. input
:收集用户输入
它让我踩过坑的一个属性是 confirm-type
,可以优化键盘的右下角按钮。
html
<!-- 比如在搜索场景 -->
<input
placeholder="请输入搜索关键词"
bindinput="onInput"
bindconfirm="onSearch"
confirm-type="search"
/>
javascript
Page({
onInput: function(event) {
// 实时获取输入值
this.setData({ keyword: event.detail.value });
},
onSearch: function() {
// 用户点击键盘的"搜索"时触发
this.doSearch();
},
doSearch: function() {
// 实际的搜索逻辑
console.log('搜索关键词:', this.data.keyword);
}
})
四、导航与媒体:提升体验的"利器"
1. navigator
:页面跳转就靠它
它相当于HTML的<a>
标签,但功能更强。
html
<!-- 普通跳转 -->
<navigator url="/pages/detail/detail?id=123">跳转到详情页</navigator>
<!-- 相当于`replace`,不保留当前页 -->
<navigator url="/pages/home/home" open-type="redirect">重定向到首页</navigator>
<!-- 切换Tab页,非常有用! -->
<navigator url="/pages/index/index" open-type="switchTab">切换回首页Tab</navigator>
2. image
:图片加载的"智能管家"
小程序的image
组件默认带了懒加载等优化,而且必须用它的mode
属性来控制裁剪和缩放,这是我花了不少时间才适应的一点。
html
<!-- 展示一张固定宽高的头像 -->
<image
src="{{avatarUrl}}"
mode="aspectFill"
class="avatar"
/>
css
.avatar {
width: 100px;
height: 100px;
border-radius: 50%;
}
这里的 mode="aspectFill"
保证图片填满容器而不变形,多余部分裁剪掉,非常适合做圆形头像。
五、我的实战心得
- 性能优先 :能用
view
和text
就别自己瞎写复杂样式,原生组件性能最好。 - 注意
open-type
:button
的这个属性是小程序打通微信能力的钥匙,一定要善用。 - 图片模式 :
mode
属性是核心,aspectFit
(完整显示)、aspectFill
(填充裁剪)、widthFix
(高度自适应)这几个我最常用。
官方提供的"积木"远不止这些,还有map
地图、canvas
画布等重量级组件。但上面这些是你几乎在每个项目中都会用到的。先把这些"基础积木"玩熟练,你的开发效率会大大提升。
希望这篇"拆解"能帮你更好地理解和使用这些组件。如果你有特别好奇或者用起来总踩坑的组件,欢迎在评论区留言,我们可以一起探讨!
⭐ 写在最后
请大家不吝赐教,在下方评论或者私信我,十分感谢🙏🙏🙏.
✅ 认为我某个部分的设计过于繁琐,有更加简单或者更高逼格的封装方式
✅ 认为我部分代码过于老旧,可以提供新的API或最新语法
✅ 对于文章中部分内容不理解
✅ 解答我文章中一些疑问
✅ 认为某些交互,功能需要优化,发现BUG
✅ 想要添加新功能,对于整体的设计,外观有更好的建议
✅ 一起探讨技术加qq交流群:906392632
最后感谢各位的耐心观看,既然都到这了,点个 👍赞再走吧!