x-form

by b1ncer

HTML

<script src="https://unpkg.com/[email protected]/umd/x-form.min.js"></script>

Babel + JSX

//简单,非侵入的 React form 双绑方案
const {XForm, XGet, decorator} = window['x-form']

const XInput = decorator('input', {getter: e => e.target.value})

const Item = ({message}) => 
	<div>{message}</div>

class SimpleForm extends React.Component {
	
    state={
    	form: {}
    }
    
    onChange(name, value, formMap) {
    	this.setState({
        	form: {
            	...formMap,
                [name]: value
            }
        })
    }
    
    render() {
    	return (
        	<div>
        	    <XForm formMap={this.state.form} onChange={this.onChange.bind(this)}>
        	        <form>
                        
        	            <XInput _bind="username"/>
                        <XGet _select={['username']}>
                            {
                            	username => {
                                	let message = 'tip: 千万不要输入: greedy is good 999999'
                                	if (username == 'greedy is good 999999') {
                                    	message = '获得金钱: 999999'
                                    }
                                    return <Item message={message} />
                                }
                            }
                        </XGet>
                        <XInput _bind="password" type="password"/>
                        <XGet _select={['username', 'password']}>
                            {
                            	(username, password) => {
                                	let message = 'tip: 密码不要小于 8 位,除非你叫库日天'
                                    if (password && password.length >= 8) {
                                    	message = '😁 看到了' + password
                                    } else if (username == '库日天') {
                                    	message = '吃个🐔吧'
                                    }
                                    return <Item message={message}/>
                                }
                            }
                        </XGet>
        	       ...