yylib-quick-mobile
Version:
yylib-quick-mobile
93 lines (89 loc) • 3.73 kB
JavaScript
import React from 'react';
import {List,Radio} from 'antd-mobile';
const RadioItem = Radio.RadioItem;
import classnames from 'classnames';
import {isFunction} from '../../utils/FunctionUtil';
import './YYRadioGroup.less';
class YYRadioGroup extends React.Component {
state={
value:this.props.value!==undefined?this.props.value:this.props.defaultValue
}
componentWillReceiveProps = (nextProps) => {
if ('defaultValue' in nextProps) {
if (this.props.defaultValue != nextProps.defaultValue) {
this.setState({value: nextProps.defaultValue});
}
}
//value优先级高于defaultValue
if ('value' in nextProps) {
if (this.props.value != nextProps.value) {
this.setState({value: nextProps.value});
}
}
}
_onChange = ({value,i}, event) => {
let valueObject = i;
let {disabled,field} = this.props;
let {getFieldProps} = this.props.form;
if (event && event.target) {
// 赋值value,以在表单里统一通过value取值处理
event.target.value = event.target.checked;
if (disabled) {
valueObject = getFieldProps(field).value;
}
}
this.setState({value:valueObject.value},()=>{
//为了在外部表单中获取到
let fields = {};
fields[this.props.field] = {
name: this.props.field,
value: valueObject
}
this.props.form.setFields(fields);
if (isFunction(this.props.onChange)) {
this.props.onChange(value,i);
}
});
}
render() {
let {getFieldProps} = this.props.form;
const {RunInDesign,field, label, options,required,visible,disabled,...restProps} = this.props;
let wrapClz = classnames('yy-radio-group', (!visible&&'hidden'),(required&&'label-required'),this.props.className);
let {value} = this.state;
let valueObject = getFieldProps(field).value&&getFieldProps(field).value.value;
let optionsDesign = [{label:'a',value:'a',checked:true},{label:'b',value:'b',checked:false},{label:'c',value:'c',checked:false}]
let requiredMsg = '必选项' + label + '必选';
return (
<List {...restProps}
className={wrapClz}
{...isFunction(getFieldProps) ? getFieldProps(field, {
initialValue: value,
valuePropName: 'value',
rules: [
{required, message: requiredMsg},
],
}) : null}
renderHeader={label}
>
{options && options.length > 0 ? options.map(i => (
<div className="radio-item" key={i.value}><Radio key={i.value} checked={valueObject==i.value||value==i.value||i.checked} onChange={this._onChange.bind(this, {value:i.value,i:i})}>
{i.label}
</Radio></div>
)) : null}
{RunInDesign ? optionsDesign.map(i => (
<div className="radio-item" key={i.value}><Radio key={i.value} checked={value==i.value||i.checked} onChange={this._onChange.bind(this, i.value)}>
{i.label}
</Radio></div>
)) : null}
</List>
)
}
}
YYRadioGroup.defaultProps = {
field: 'default',
label: '',
options: null,
defaultValue:[],
visible:true,
};
export default YYRadioGroup;