微信小程序
、h5
安装:
npm i taro-listview
,yarn add taro-listview
!!!需给组件设置固定高度
属性 | 说明 | 类型 | 默认值 | 必传 |
---|---|---|---|---|
style | - | - | - | - |
lazy | 开启懒加载(传入字符串为父元素 className 且开启) | boolean or string | false or '.lazy-view' | - |
hasMore | 加载更多 | boolean | true | true |
isEmpty | 展示空凭页 | boolean | - | - |
isError | 展示错误页 | boolean | - | - |
needInit | 初始化&自动调用下拉刷新方法 | boolean | - | - |
distanceToRefresh | 下拉刷新距离 | number | - | - |
damping | 最大下拉距离 | number | - | - |
autoHeight | 开启自适应高度 | boolean | - | - |
lazyStorage | Storage Key值用于区分ListView | string | box | - |
属性 | 说明 | 类型 | 默认值 | 必传 |
---|---|---|---|---|
color | 下拉加载时 loading 的颜色 | string | #667baf | - |
emptyText | 空白页提示语 | string | - | - |
footerLoadedText | 列表底部加载完毕提示语 | string | - | |
footerLoadingText | 列表底部加载中提示语 | string | 加载中 | - |
launch | *是否开启状态屏的渲染,状态屏节点对应以下 renderXX 属性(如下) | object | { launchError = false, launchEmpty = false, launchFooterLoaded = false, launchFooterLoading = false } |
- |
renderError | 错误页 | Taro.Node | - | - |
renderEmpty | 空白页 | Taro.Node | - | - |
renderFooterLoaded | 自定义底部加载完毕 | Taro.Node | - | - |
renderFooterLoading | 自定义底部加载 | Taro.Node | - | - |
indicator | 下拉提示语 | Object | { release = '加载中', activate = '下拉刷新', deactivate = '释放刷新'} |
- |
*错误屏中重新初始化方法与下拉刷新方法一致
import Taro, { Component } from "@tarojs/taro";
import { View, Image } from "@tarojs/components";
import ListView, { LazyBlock } from "taro-listview";
const blankList = [
{
author: {},
title: "this is a example"
},
{
author: {},
title: "this is a example"
},
{
author: {},
title: "this is a example"
},
{
author: {},
title: "this is a example"
}
];
let pageIndex = 1;
export default class Index extends Component {
state = {
isLoaded: false,
error: false,
hasMore: true,
isEmpty: false,
list: blankList
};
getData = async (pIndex = pageIndex) => {
if (pIndex === 1) this.setState({ isLoaded: false });
const {
data: { data }
} = await Taro.request({
url: "https://cnodejs.org/api/v1/topics",
data: {
limit: 10,
page: pIndex
}
});
console.log({ data });
return { list: data, hasMore: true, isLoaded: pIndex === 1 };
};
componentDidMount() {
this.refList.fetchInit();
}
pullDownRefresh = async () => {
pageIndex = 1;
const res = await this.getData(1);
this.setState(res);
};
onScrollToLower = async fn => {
const { list } = this.state;
const { list: newList, hasMore } = await this.getData(++pageIndex);
this.setState({
list: list.concat(newList),
hasMore
});
fn();
};
refList = {};
insRef = node => {
this.refList = node;
};
render() {
const { isLoaded, error, hasMore, isEmpty, list } = this.state;
return (
<View className="skeleton lazy-view">
<ListView
lazy
ref={node => this.insRef(node)}
isLoaded={isLoaded}
isError={error}
hasMore={hasMore}
style={{ height: "100vh" }}
isEmpty={isEmpty}
onPullDownRefresh={this.pullDownRefresh}
onScrollToLower={this.onScrollToLower}
lazyStorage='lazyView'
>
{list.map((item, index) => {
return (
<View className="item skeleton-bg" key={index}>
<LazyBlock current={index} className="avatar" lazyStorage='lazyView'>
<Image
className="avatar skeleton-radius"
src={item.author.avatar_url}
/>
</LazyBlock>
<View className="title skeleton-rect">{item.title}</View>
</View>
);
})}
</ListView>
</View>
);
}
}
1.模块需固定同一高度。
2.只能在 ListView 组件内使用,并开启 lazy 模式,且父元素的 className='lazy-view'!!!
3.组件需传入模块遍历后的下标。
属性 | 说明 | 类型 | 默认值 | 必传 |
---|---|---|---|---|
current | 传入模块遍历后的下标 | number | null | true |
lazyStorage | Storage Key值用于区分ListView(获取是哪一个ListView) | string | box | - |
import Taro, { Component } from "@tarojs/taro";
import { View, Image } from "@tarojs/components";
import ListView, { LazyBlock } from "taro-listView";
let pageIndex = 1;
export default class Index extends Component {
state = {
isLoaded: false,
error: false,
hasMore: true,
isEmpty: false,
list: []
};
getData = async (pIndex = pageIndex) => {
if (pIndex === 1) this.setState({ isLoaded: false });
const {
data: { data }
} = await Taro.request({
url: "https://cnodejs.org/api/v1/topics",
data: {
limit: 10,
page: pIndex
}
});
return { list: data, hasMore: true, isLoaded: pIndex === 1 };
};
componentDidMount() {
this.getData();
}
onScrollToLower = async fn => {
const { list } = this.state;
const { list: newList, hasMore } = await this.getData(++pageIndex);
this.setState({
list: list.concat(newList),
hasMore
});
fn();
};
render() {
const { isLoaded, error, hasMore, isEmpty, list } = this.state;
return (
<View className="lazy-view">
<ListView
lazy
isLoaded={isLoaded}
hasMore={hasMore}
style={{ height: "100vh" }}
onScrollToLower={this.onScrollToLower}
lazyStorage='lazyViewBlock'
>
{list.map((item, index) => {
return (
<View className='item' key={index}>
<LazyBlock current={index} className='avatar' lazyStorage='lazyViewBlock'>
<Image className='avatar' src={item.author.avatar_url} />
</LazyBlock>
<View className="title">{item.title}</View>
</View>
);
})}
</ListView>
</View>
);
}
}
1.因骨架屏是捕捉已有占位数据的样式,再绘制出骨架,所以要先注入默认空白占位数据。
2.且需要一个传入父元素的 className(默认获取为“skeleton”),以便寻找元素下的所有“关节”元素。可通过传入 selector 参数自定义 className。
有且只有捕捉以下提供的“关节”样式名:背景('skeleton-bg')、矩阵('skeleton-rect')、圆形('skeleton-redius')。
3.ListView 组件已嵌套 Skeleton 组件,直接调用对应属性即可。
*“关节”元素需内容撑开,或者固定高度。
属性 | 说明 | 类型 | 默认值 | 必传 |
---|---|---|---|---|
isLoaded | 骨架屏是否显示(eg:加载第一页时开启) | boolean | false | - |
selector | 骨架屏外层 class 名称 | skeleton | - | - |
import Taro, { useState } from "@tarojs/taro";
import { View, Button } from "@tarojs/components";
import { Skeleton } from "components";
import "./index.scss";
export default () => {
const [isLoaded, setLoaded] = useState(false);
return (
<View>
<Button onClick={() => setLoaded(!isLoaded)}>toggle</Button>
<View className="skeleton">
<Skeleton isLoaded={isLoaded}>
{Array(4)
.fill(1)
.map(i => (
<View className="item skeleton-bg" key={i}>
<View className="avatar skeleton-radius" />
<View className="title skeleton-rect">title</View>
</View>
))}
</Skeleton>
</View>
</View>
);
};
事件名称 | 说明 | 类型 | 默认值 | 必传 |
---|---|---|---|---|
onPullDownRefresh | 下拉刷新触发函数 | function | - | - |
onScrollToLower | 上拉底触发函数 | function | - | - |
onPullDownRefresh = () => {
getData();
};
onScrollToLower = async fn => {
await getData();
fn();
};
RecyclerList 这是一款基于@tarojs/components/virtual-list组件实现的高性能列表组件,除性能优化之外,亦扩展了大量API以尽可能满足大部分应用场景。 npm install --save recyclerlist 简介 实现了哪些功能 Demo Props 简介 recyclerlist在@tarojs/components/virtual-list的基础上
我的xaml中有一个 ListView ,它的ItemsSource和SelectedItem属性绑定到ViewModel . Xaml ViewModel public ObservableCollection _SitesCollection; public ObservableCollection SitesCollection { get { //populate collection r
listView点击条目跳转并带参数代码记录如下: listView.setOnItemClickListener(new AdapterView.OnItemClickListener() { String url="rtmp://3387.livepla"; String url1="rtmp://3387.liv"; String url2="rtmp://3387.
ListViewItem:整个表格的一行。 ListViewSubItem:表格中某个单元格。 ListViewItem是由很多个ListViewSubItem组合而成。 view为details时 1、ListView中的Columns 这个暂时还不是很清楚,类似于表头吧。忘路过的大拿解释 2、ListView中的Item,Item下的SubItem。首先说Item是一个整体,举例子来说 Ite
Taro 简介 Taro 是京东零售 - 用户体验设计部 - 体验技术部推出的一套遵循 React 和 Vue.js 语法规范的 多端统一开发 解决方案。 使用 Taro,我们可以只书写一套代码,再通过 Taro 的编译,将源代码分别编译出可以在不同端(京东小程序 / 微信 / 百度 / 支付宝 / 字节跳动 / QQ、快应用、H5、React-Native 等)运行的代码。 使用 Taro 不仅
Taro - 开放式跨端跨框架解决方案,支持使用 React/Vue/Nerv 等框架来开发微信/京东/百度/支付宝/字节跳动/ QQ 小程序/H5 等应用。 Taro['tɑ:roʊ],泰罗·奥特曼,宇宙警备队总教官,实力最强的奥特曼。 Taro 是什么? Taro 是由京东 - 凹凸实验室打造的一套开放式跨端跨框架解决方案。 Taro 支持使用 React/Vue/Nerv 等框架来开发微信/
Taro UI 是由凹凸实验室推出的一款基于 Taro 框架开发的多端 UI 组件库。 特性 基于 Taro 开发 UI 组件 一套组件可以在 微信小程序,H5,ReactNative 等多端适配运行 提供友好的 API,可灵活的使用组件 Taro UI 的第一版组件共有六个模块、三十三个组件,并在持续添加中: 安装 需要安装 Taro 开发工具 @tarojs/cli,Taro 版本需要在 1.
基于Taro与网易云音乐api开发,技术栈主要是:typescript+taro+taro-ui+redux,目前主要是着重小程序端的展示,主要也是借此项目强化下上述几个技术栈的使用,通过这个项目也可以帮助你快速使用Taro开发一个属于你自己的小程序~ 功能列表
在Taro框架中使用iconfont图标,不依赖字体,支持多色彩。 支持平台 React-Native 微信小程序 支付宝小程序 百度小程序 特性 1、一键生成标准组件,多端支持 2、使用方便,import即可 3、支持多色彩 4、支持自定义颜色 5、支持es6和typescript两种模式
taro-script For Taro v3:支持多端小程序动态加载远程 JavaScript 脚本并执行,支持 ES5 语法 Usage npm install --save taro-script import TaroScript from "taro-script";<TaroScript text="console.log(100+200)" />; import TaroScript