react 手写移动端radio&&checkbox组件支持rc-form的使用

1.文件目录:

2.代码地址:

https://github.com/wangchun123/react-Ant-Design-Mobile/tree/master/src/components

3.checkbox的调用代码:

import React, { Component } from 'react';
import Checkbox from '@/components/checkbox';
import './index.scss';
export default class index extends Component {
  constructor(props) {
    super(props);

    this.state = {
      dataSource: [],
      defaultValue: '',
    };
  }

  componentDidMount() {
    this.setState({
      dataSource: [
        { label: 'test1', value: '1' },
        { label: 'test2', value: '2' },
        { label: 'test3', value: '3' },
        { label: 'test4', value: '4' },
        { label: 'test5', value: '5' },
        { label: 'test6', value: '6' },
      ],
      defaultValue: '1',
    });
  }

  render() {
    return (
      <div>
        <Checkbox
          dataSource={this.state.dataSource}
          defaultValue={this.state.defaultValue}
          onChange={(val) => console.log(val)}
          // radioLayout="inline"
          itemClassName="some"
          size="large"
        ></Checkbox>
      </div>
    );
  }
}

4.radio调用代码-支持rc-form的使用:

import React, { Component } from 'react';
import Radio from '@/components/radio';
import { Modal } from 'antd-mobile';
import { createForm } from 'rc-form';
import './index.scss';

const alert = Modal.alert;

class index extends Component {
  constructor(props) {
    super(props);

    this.state = {
      dataSource: [],
      defaultValue: '',
    };
  }

  componentDidMount() {
    // console.log('this.props', this.props.form.getFieldsValue());

    // console.log('this.props', this.props.form.setFieldsValue({ age: '6' }));

    this.setState({
      dataSource: [
        { label: 'test1', value: '1' },
        { label: 'test2', value: '2' },
        { label: 'test3', value: '3' },
        { label: 'test4', value: '4' },
        { label: 'test5', value: '5' },
        { label: 'test6', value: '6' },
      ],
      defaultValue: '1',
    });
  }

  render() {
    return (
      <form>
        <Radio
          dataSource={this.state.dataSource}
          // defaultValue={this.state.defaultValue}
          // value="1"
          onChange={(val) => console.log(val)}
          // radioLayout="inline"
          itemClassName="some"
          size="large"
          {...this.props.form.getFieldProps('age', {
            // initialValue: '6',
            rules: [
              { required: true, message: '请选择radio' },
              // { validator: this.validateAccount },
            ],
          })}
        ></Radio>
        <button
          onClick={() =>
            this.props.form.validateFields({ force: true }, (error) => {
              if (!error) {
                console.log(this.props.form.getFieldsValue());
              } else {
                alert(
                  '校验错误',
                  this.props.form.getFieldError('age').join(','),
                );
                console.log(this.props.form.getFieldError('age').join(','));
              }
            })
          }
        >
          提交
        </button>
      </form>
    );
  }
}

export default createForm()(index);

5.总结:

手写组件的初衷是,antd-mobile组件库的组件不能满足业务需求。所以自己写了移动端单选,复选组件。如果你们看代码发现css是px不用奇怪是框架采用了postcss-plugin-px2rem插件具体api可以查阅https://www.npmjs.com/package/postcss-plugin-px2rem 写完以后发现不能兼容rc-form配合使用,rc-form使得移动端表单具备form的能力。如果你现在还是用class组件具体api可以查阅https://www.npmjs.com/package/rc-form如果你是hooks的爱好者具体api可以查阅https://www.npmjs.com/package/rc-form-hooks

以上的radio调用就结合了rc-form一起。具体注意的点是,组件具备onChange属性就是收集组件的value值得。组件具备value属性就是组件自身的value值。自定义组件具备以上2点属性就可以和rc-form配合使用了。如果你们有更好的form能力可以推荐下。

6.组件效果:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

见光就死123

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值