freed-multi v1.5.0
freed-multi
react + mobx + ant-design-mobile
注意事项
- 页面入口为entry.js,规则: /src/pages/{页面名字}/entry.js
- 统一使用flex布局。尽量少用float
- svg图片放在src/svg-folder(icon图标)
- 边框1px统一使用 ~freed-multi/lib/style/border-1px.scss
- 字体不能小于24px(设计图750)
- 代码书写规范 Airbnb
- 提交前执行eslint npm run lint
- import顺序 react > ant-mobile > mobx > 第三方库 > freed-multi > components > scss > svg
- html rootdiv height为100% 如需滑动内部处理,不使用webview自带滑动
- 需要添加configPage.json文件在 src/ 下,用于原生读取落地页 {"list": "list/index.html"}
components
NavBar
import { NavBar, NavBarContentLayout, setTitle } from 'freed-multi';
<NavBar
title="test" // 此处可传title
/>
<NavBarContentLayout>
// you code
</NavBarContentLayout>
import { setTitle } from 'freed-multi';
setTtile('首页');
参数 | 说明 | 类型 | 是否必须 | 可选值 | 默认值 |
---|---|---|---|---|---|
title | 页面标题 | string | 否 | '' | |
leftButtonTitle | 左侧按钮文字 | string | 否 | < | |
leftButtonClick | 返回按钮点击前回调 | function | 否 | ()=>{} | |
leftDisable | 返回按钮禁用状态 | boolean | 否 | false | |
helpClick | 帮助按钮点击,不传则不显示 | function | 否 | ||
showClose | 关闭按钮是否显示 | boolean | 否 | false | |
rightButton | 右侧按钮数组 | object | 否 |
rightButton
属性 | 说明 | 类型 | 是否必须 | 可选值 | 默认值 |
---|---|---|---|---|---|
icon | icon图标或文字 icon图标 import SVG 和ant icon组件使用方法一致 | string | 是 | ||
antType | ant提供的icon 传入type | string | 否 | ||
click | 点击函数 | function | 否 | ()=>{} | |
disable | 是否禁用 | boolean | 否 | false | |
sup | 显示icon右上角数字 | number | 否 | ||
key | 用于修改, 根据key更改button | string | 否 |
SearchNavBar
import { SearchNavBar, SearchBarContentLayout } from 'freed-multi'; <SearchNavBar defaultValue="test" /> <SearchBarContentLayout> // you code </SearchBarContentLayout>
参数 说明 类型 是否必须 可选值 默认值 defaultValue 默认显示搜索值 string 否 '' placeholder placeholder string 否 '' onSubmit 点击搜索 function 否 ()=>{} onClear 点击清除 function 否 ()=>{} onFocus 获取焦点 function 否 ()=>{} onBlur 失去焦点 function 否 ()=>{} isChangeDefaultValue 是否需要重新传入defaultValue 改变当前值 boolean 否 false Boxer
import { Boxer } from 'freed-multi';
<Boxer
title="test"
>
// you code
</Boxer>
- FixedLayout
import { FixedLayout } from 'freed-multi';
<FixedLayout
content={<div>test</div>}
fixer={<div>底部定位容器</div>}
/>
参数 | 说明 | 类型 | 是否必须 | 可选值 | 默认值 |
---|---|---|---|---|---|
content | 内容区域 | react node | 否 | '' | |
fixer | 定位区域 | react node | 否 | '' |
ListView
import { ListView, activeRefresh } from 'freed-multi'; componentDidMount() { // 设置listview高度... const listView = window.document.getElementById('test-list'); listView.style.height = {计算出页面剩余高度}; } getMoreData() { return new Promise((resolve) => { http.get('ttttt').then(res => { resolve({ data: {需要渲染的数据, Array} hasMore: {是否还有更多数据,boolean} }); }) }) } renderItem(rowData) { return ( <div key={rowData.id}>{rowData.text}</div> ) } <ListView id="test-list" renderItemFunc={this.renderItem} getMoreDataFunc={this.getMoreData} getRefreshDataFunc={this.getRefreshData} isLoadMore noMoreText="没有更多商品了~" /> // 其他点击事件后刷新listview数据 activeRefresh(() => { return new Promise((resolve) => { http.get('ttttt').then(res => { resolve({ data: {需要渲染的数据, Array} hasMore: {是否还有更多数据,boolean} }); }) }) });
参数 说明 类型 是否必须 可选值 默认值 id dom节点ID 用于设置高度 string 否 '' renderItemFunc 渲染列表单个item function 是 getMoreDataFunc 获取数据函数 function 是 getRefreshDataFunc 下拉刷新数据 function 否 ()=>{} isLoadMore 是否启用瀑布流(加载更多) boolean 否 false isRefresh 是否启用下拉刷新 boolean 否 false onScroll 列表滚动事件 function 否 ()=>{} noMoreText 没有更多的时候,底部显示文字 string 否 抱歉,没有更多商品啦~ Tags
import { Tags, Tag } from 'freed-multi'; <Tags> <Tag text="aaaa" onClick={() => {alert('test')}} /> <Tag text="bbbb" /> </Tags>
参数 说明 类型 是否必须 可选值 默认值 text 显示文字 string 否 '' onClick 点击回调 function 否 ()=>{} - WhiteAll
import { WhiteAll } from 'freed-multi'; <WhiteAll> // you code </WhiteAll>
- LazyLoad 基于react-lazyload封装,支持传入该组件props
import { LazyLoad } from 'freed-multi';
<LazyLoad
overflow
>
<img src="http://www.aaa.com/a.png">
</LazyLoad>
native(原生插件)
redirect(url, options) 跳转webview
``` import { Native } from 'freed-multi'; Native.redirect('deal/index.html', { paramsCallBack: (data) => { // data 为回传数据 } }); ```
参数 说明 类型 是否必须 可选值 默认值 url 绝对路径地址 如: list/index.html String 是 options 参数 Object 否 options
属性 说明 类型 是否必须 可选值 默认值 transition 跳转动画 String 否 right,bottom,none right closeSelf 是否关闭当前页 boolean 否 false navigationBarHidden 是否隐藏导航栏 boolean 否 true paramsCallBack 页面回调,从B页面回来时执行 function 否 goback(data) 返回上一页
``` import { Native } from 'freed-multi'; Native.goBack(); ```
参数 说明 类型 是否必须 可选值 默认值 data 回传给上一个页面数据 any 否 goBackHandle(callback, isIntercept) 监听安卓物理返回键
import { Native } from 'freed-multi'; Native.goBackHandle(() => { if (data !== '') { Native.goBack(); } }); ``` | 参数 | 说明 | 类型 | 是否必须 | 可选值 | 默认值 | |---------------- |----------------|----------|----------|--------------|--------- | callback | 点击物理键时触发函数 | function | 是 | | | | isIntercept | 是否监听 | boolean | 否 | | true |
popPage(isMe) 推出之后的webview
import { Native } from 'freed-multi'; Native.notification.listen('demo', () => { // 主要和监听一起用 Native.popPage(); }); ``` | 参数 | 说明 | 类型 | 是否必须 | 可选值 | 默认值 | |---------------- |----------------|----------|----------|--------------|--------- | isMe | 是否推出自己 | boolean | 否 | | false |
popAllPage() 推出所有webview 回到原生列表
``` import { Native } from 'freed-multi'; Native.popAllPage(); ```
checkStatus(callback) 检查网络状态
import { Native } from 'freed-multi'; Native.networkStatus((status) => { status === 0:无网络, 1: Wifi, 2: 3/4G, }); ```
fetchCommonParams(callback) 获取业务参数
import { Native } from 'freed-multi'; Native.fetchCommonParams((dictionary) => { dictionary.userName // 用户名 dictionary.cityName // 城市名 dictionary.avatarUrl // 头像链接 dictionary.ip // 用户ip地址 }); ```
handleError(errCode) 处理业务逻辑错误
import { Native } from 'freed-multi'; Native.handleError('401'); ``` | 参数 | 说明 | 类型 | 是否必须 | 可选值 | 默认值 | |---------------- |----------------|----------|----------|--------------|--------- | errCode | 传给原生的错误码 | string | 是 | '401' | |
notification.emit(key, data) notification.listen(key, (data) => {})
import { Native } from 'freed-multi'; A页面监听 > Native.notification.listen('a', (data) => { console.log(data) // 数据 }); B页面发出通知 > Native.notification.emit('a', '数据') ``` | 参数 | 说明 | 类型 | 是否必须 | 可选值 | 默认值 | |---------------- |----------------|----------|----------|--------------|--------- | key | 监听key值 | string | 是 | | | | data | 传输数据 | any | 是 | | |
pay(payType, payInfo, callback) 支付
import { Native } from 'freed-multi'; Native.pay('alipay', {后端给的支付信息}, (result) => { if (result === 'success') { alert('支付成功'); } eles if (result === ''fail){ alert('支付失败'); } }) ``` | 参数 | 说明 | 类型 | 是否必须 | 可选值 | 默认值 | |---------------- |----------------|----------|----------|--------------|--------- | payType | 支付类型 | string | 是 | "weixin": "微信支付";"alipay": "支付宝" | | | payInfo | 支付信息 | object | 是 | | | | callback | 支付回调 | function | 是 | | |
deepLink(options, success, fail) 跨模块跳转
import { Native } from 'freed-multi'; Native.deepLink( { moduleID: 101, moduleKey: 'index', param: { id: 100000, text: 'aaa' }, transition: 'right', closeSelf: false } )
参数 说明 类型 是否必须 可选值 默认值 moduleID 模块ID number 是 100: '供应链' 101: '活动页' moduleKey 跳转落地页key string 是 param 传入参数 object 否 transition 跳转动画 string 否 right, bottom right closeSelf 是否关闭当前页 boolean 否 false scan(title, callback) 扫一扫
import { Native } from 'freed-multi'; Native.scan( '测试扫一扫', (data) => { // data 成功扫描回调 } )
参数 说明 类型 是否必须 可选值 默认值 title 显示标题 string 否 '' callback 成功扫描回调 function 是
style
- border 1px 处理
@import '~freed-multi/lib/style/border-1px';
@include border-1px(bottom, #e1e1e1);
- 手指按下时的背景色
- 默认#F3F3F5
@import '~freed-multi/lib/style/activeBgColor'; @include activeBgColor(${可传入颜色});
- 超出几行 ...显示
- 默认一行
@import '~freed-multi/lib/style/ellipsis'; @include ellipsis(${可传入行数});
utils
- http
- LocalStore
- isMobile
- util
- parseQuerystring(object) 转换url参数
- getQueryString(key, isDecode) 获取url上参数 isDecode->是否转码
7 years ago
7 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago