react-native-sk-validatable-form
Version:
component that wraps your form fields, it’s easy to get their value, validate their value.
151 lines (143 loc) • 3.92 kB
JavaScript
import React, {
AppRegistry,
Alert,
} from 'react-native';
var {SKNavigator} = require('react-native-sk-navigator');
var { Form, Widget, WidgetMixin, WidgetClassFactory, Validation, Message } = require('react-native-sk-validatable-form');
// 如果你想显示中文的错误消息
// Message.setLanguage('cn');
var Home = React.createClass({
submit(){
var title, msg;
if(this.refs.form.validate()){
title = 'Success';
msg = 'validate success';
}else{
title = 'Fail';
msg = this.refs.form.getErrorMessages().join('\n');
}
Alert.alert(
title,
msg,
[
{text:'ok'},
]
);
},
render() {
return (
<Form
ref='form'
navigator={this.props.navigator}
keyboardShouldPersistTaps={true} // 点在当前输入框外不隐藏键盘
scrollEventThrottle={200} // 解决android不能手指滚动界面的问题
style={[styles.container, this.props.style]}>
{/* title 标题 */}
<Widget.TextInputInline
name='title'
title='title'
validations='isRequired,isLength:[1,50]'
validateOnBlur={true}
maxLength={50}
style={[styles.textInput, styles.titleInput]}
placeholderTextColor='#B9B9B9'
placeholder='Please input title(limit 50 character)'
/>
{/* married 已婚 */}
<Widget.SwitchInline
name='married'
title='married'
defaultValue={false}
onTintColor='#F59E21'
validations='isRequired'
/>
{/* sex 性别 */}
<Widget.SexLinkInline
name='sex1'
title='sex1'
validations='isRequired'
placeholder='Please select sex'
/>
{/* sex 性别 */}
<Widget.PickerIOSLinkInline
name='sex2'
title='sex2'
validations='isRequired'
placeholder='Please select sex'
items={{'female': 'Female/Woman', 'male': 'Male/Man'}}
/>
{/* sex 性别 */}
<Widget.PickerLinkInline
name='sex3'
title='sex3'
validations='isRequired'
placeholder='Please select sex'
items={{'female': 'Female/Woman', 'male': 'Male/Man'}}
/>
{/* date 日期 */}
<Widget.DateIOSLinkInline
name='date'
title='date'
validations='isRequired'
placeholder='please select date'
/>
{/* place 地点 */}
<Widget.MapLinkInline
name='place'
title='place'
validations='isRequired'
placeholder='please select place'
/>
{/* content 内容 */}
<Widget.TextInput
name='content'
title='content'
validations='isRequired,isLength:[1,200]'
validateOnBlur={true}
maxLength={200}
style={[styles.textInput, styles.contentInput]}
placeholderTextColor='#B9B9B9'
placeholder='Please input content'
onFocus={() => this.refs.form.scrollTo({y: 60})}
multiline={true}
/>
</Form>
);
}
});
var SKFormExample = React.createClass({
render() {
return (
<SKNavigator
initialRoute={{ // 初始路由
title: 'Home',
component: Home,
passProps: {
ref: (ref) => this.home = ref,
},
rightButtonTitle: 'submit',
onRightButtonPress: () => this.home.submit(),
}}/>
)
}
})
var styles = {
container: {
flex: 1,
backgroundColor: '#FFF',
},
textInput:{
fontSize: 15,
},
titleInput: {
flex: 1,
color: 'black',
},
contentInput: {
marginLeft: 10,
height: 160,
color: '#5E5D5D',
},
};
AppRegistry.registerComponent('SKFormExample', () => SKFormExample);
;