1.3.9 • Published 8 years ago

react-mobile-components v1.3.9

Weekly downloads
1
License
ISC
Repository
github
Last release
8 years ago

React Mobile Components

基于 React 的移动端组件包,欢迎试用 。:.゚ヽ(*´∀`)ノ゚.:。

bug 肯定是有的……求轻喷……

Demo 地址(手机打开):Demo

使用

npm install react-mobile-components -S
// touchTap 插件
import injectTapEventPlugin from 'react-tap-event-plugin';

// 按需求加载组件
import { Button, Icon, Form, Tab, TopAction } from 'react-mobile-components';

injectTapEventPlugin();

图标

<Icon name='home' />
<Icon name='loading' rotate />    // 旋转

加载状态

<Loading />   // 传说中的小菊花

按钮

<Button onClick={this.click}>确认</Button>
<Button disabled>禁用</Button>
<Button type='submit'>提交表单</Button>
<Button icon='money'>前面带个图标</Button>
<Button icon='money' link>链接样式</Button>

日历

<Calendar date={new Date()} />

勾选按钮(类似 checkbox)

<CheckButton>设为默认</CheckButton>
<CheckButton checked>已勾选</CheckButton>
<CheckButton onToggle={this.toggle}>onToggle(checked<bool>)</CheckButton>

选择列表

const choiceData = [
  {
    name: 'white',
    text: '白色'
  },
  {
    name: 'black',
    text: '黑色',
    checked: true
  },
  {
    name: 'khaki',
    text: '卡其色',
    disabled: true
  }
];
<ChoiceList data={choiceData} onToggle={this.handleEvents} />
// onToggle(name, checked)

下拉筛选

支持多组下拉筛选列表,可附加一个勾选选项

const dropDownData = {
  toggle: {
    name: 'exchangeable',
    text: '我能兑换'
  },
  filters: [{
    name: 'sort',
    text: '排序',
    list: [{
      name: 'count',
      text: '兑换量优先'
    }, {
      name: 'pointsAtoZ',
      text: '积分从低到高'
    }]
  }, {
    name: 'category',
    text: '分类',
    list: [{
      name: 'all',
      text: '全部'
    }, {
      name: 'physical',
      text: '实物礼品'
    }]
  }]
};

<Dropdown {...dropDownData} onFilter={this.filter} />
// onFilter 参数格式:{ exchangeable: true, sort: 'count', category: 'all' }

两级菜单:

const dropDownData = {
  filters: [
    {
      name: 'category',
      text: '分类',
      depth: 2,
      list: [
        {
          name: 'all',
          text: '全部'
        },
        {
          name: 'physical',
          text: '实物礼品'
        },
        {
          name: 'discount',
          text: '淘宝优惠',
          list: [
            {
              name: 'all',
              text: '全部'
            },
            {
              name: 'free-shipping-card',
              text: '包邮卡'
            }
          ]
        }
      ]
    }
  ]
};

<Dropdown {...dropDownData} onFilter={this.filter} />
// onFilter 参数格式:{ exchangeable: true, sort: 'count', category: ['discount', 'all'] }

表单控件

  • 可以加一个 label,也可以不要
  • 自带验证
  • type 支持除了 checkbox 和 radio 之外所有的 input type,外加 select 和 textarea
  • 为保持数据一致性,请用 value 传值,不要用 defaultValue;修改表单的值请通过 onChange 回调,手动在上层 view 控制
<FormControl name='test' 
             value={this.state.test} 
             onChange={this.controlChange.bind(this)} />
<FormControl type='select' options={[{ value: '1', text: '选项 1' }]} />
// onChange(name<string>, value<string>)

表单

  • 自带验证
  • beforeSubmit 返回 false 不能提交
  • 提交表单的逻辑写在 onSubmit 里
const formData = {
  action: '/form',
  controls: [
    {
      name: 'text',
      type: 'text',
      required: true
    }
  ],
  submitText: '提交',
  beforeSubmit(formData) {},
  onSubmit(formData) {}
};
<Form {...formData} />
<Form {...formData} {submitAtPageBottom} />   // 提交按钮固定在页面底部

加加减减

  • 为保持数据一致性,请用 value 传值,不要用 defaultValue;修改值请通过 onChange 回调,手动在上层 view 控制
<PlusMinus value={10} min={0} max={100} onChange={this.change} />

// onChange(value)

Tab

以下几种 Tab 配置差不多,基本只有样式的区别

Tab.Nav

Tab 导航

const tabNavData = [
  {
    icon: 'home',
    text: '积分互动',
    link: 'home',     // 效果:href='#/home'
    type: 1           // 颜色样式
  },
  {
    icon: 'gift-box',
    text: '礼品箱',
    link: '//taobao.com',   // 效果:href='//taobao.com'
    type: 2
  }
];
<Tab.Nav data={tabNavData} />

Tab.Bar

页面底部的 Tab 栏

const tabBarData = [
  {
    badge: '9',         // 右上角的数字标签
    icon: 'gift-box',
    text: '礼品箱',
    link: 'gift-box'
  }
];
<Tab.Bar data={tabBarData} />

Tab.Scope

页面顶部的 Tab 筛选

const tabScopeData = [
  {
    text: '全部',
    link: 'history/1'
  },
  {
    text: '已发货',
    link: 'history/2'
  }
];
<Tab.Scope data={tabScopeData} />

表格视图

const tableData = [
  {
    text: '个人信息',    // 左侧文字
    note: '2015-10-10', // 左侧备注信息
    href: 'profile',
    disclosure: true    // 右侧的向右箭头
  },
  {
    text: '收货地址',
    href: 'address',
    disclosure: true,
    children: <img src='' alt='' />   // 右侧自定义内容
  }
];
<Table data={tableData} />
<Table data={tableData} expanded={true} onToggle={this.toggle}>  // 点击表头伸缩内容
  <span>此处自定义内容为表头</span>
</Table>

// onToggle(expanded<bool>)

图片框

将图片展示在指定大小的框内

<ImageBox src='' style={{ width: 122, height: 122 }} />
// 可通过 className 或 style 控制

图片滑动切换

左右滑动切换图片

<ImageSlider data={['1.jpg', '2.jpg']} />

消息

Message('message', 2000);   // 屏幕弹出消息 2 秒

遮罩层

Mask.open({
  zIndex: 100,              // 可自定义 zIndex
  onTouchTap: Mask.close    // 点击后回调 
});

返回顶部

返回顶部的小按钮,会在页面滚动后出现

<TopAction /> 

上拉加载更多

<PullLoader onPull={() => {}} loading>
  {this.props.children}
</PullLoader>

// 加载数据的方法请写在 onPull 回调里,设置 loading 属性可显示一个加载的小菊花
1.3.9

8 years ago

1.3.8

8 years ago

1.3.7

8 years ago

1.3.6

8 years ago

1.3.5

8 years ago

1.3.4

8 years ago

1.3.3

8 years ago

1.3.2

8 years ago

1.3.1

8 years ago

1.3.0

8 years ago

1.2.2

8 years ago

1.2.1

8 years ago

1.2.0

8 years ago

1.1.4

8 years ago

1.1.3

8 years ago

1.1.2

9 years ago

1.0.2

9 years ago

1.0.1

9 years ago

1.0.0

9 years ago