UNPKG

saven

Version:
76 lines (71 loc) 1.97 kB
import Nerv from 'nervjs' class RadioGroup extends Nerv.Component { constructor () { super(...arguments) // this.state = { // value: [] // } this.uniqueName = Date.now().toString(36) this.radioValue = [] this.toggleChange = this.toggleChange.bind(this) } toggleChange (e, i) { let checkValue let _value = this.radioValue.map((item, idx) => { if (e.target.value === item.value) { checkValue = item.value return { name: item.name, value: item.value, checked: !item.checked } } return item }) this.radioValue = _value const { onChange } = this.props Object.defineProperty(e, 'detail', { enumerable: true, value: { value: checkValue } }) onChange && onChange(e) } render () { const { name = this.uniqueName } = this.props // 给 children 绑定事件 const children = Nerv.Children.toArray(this.props.children).map( (item, i) => { let _key = item.props.for const chd = Nerv.Children.toArray(item.props.children).map(ch => { if (ch.name === 'Radio') { if (ch.props.checked) { this.radioValue[i] = { name: ch.props.name, value: ch.props.value, checked: true } } else { this.radioValue[i] = { name: ch.props.name, value: ch.props.value, checked: false } } return Nerv.cloneElement(ch, { onChange: e => this.toggleChange(e, i), for: _key, name: name }) } return ch }) return Nerv.cloneElement(item, '', chd) } ) /* TODO 规避Nerv数组diff问题 */ return (<div className='weui-cells_radiogroup'>{children}</div>) } } export default RadioGroup