[原創]react-vio-form 快速構建React表單應用
阿新 • • 發佈:2018-12-28
react-vio-form 是一個react的快速輕量表單庫,能快速實現表單構建。提供自定義表單格式、表單校驗、表單資訊反饋、表單資訊隔離等功能。可採用元件宣告或者API的形式來實現表單的功能
react-vio-form 基於React.createContext實現,要求開發者使用React16+的版本
github:地址
安裝
npm install --save react-vio-form
快速教程
首先我們先自定義自己的輸入框元件
InputGroup.js
import React, { Component } from 'react'; class InputGroup extends Component { render() { let { onChange,//必須使用的屬性,表單欄位的值改變方法 value,//必須使用的屬性,表單欄位的值 message,//必須使用的屬性,表單欄位的報錯資訊 title,//自定義屬性 type="text"//自定義屬性 }=this.props; return ( <div> <label>{title}:</label> <input type={type} onChange={e=>onChange(e.target.value)}/> {message&&<span>{message}</span>} </div> ); } } export default InputGroup;
接著我們配置我們的表格
- 最外層是Form元件,向它傳遞一個onSubmit的回撥方法,在回撥方法內我們輸出表單的值。
- 裡面是Field元件,它接收我們剛才寫的InputGroup為component屬性、fieldName為該欄位的名稱、regexp為該欄位的校驗正則表示式、message為當表單校驗不通過的時候顯示的報錯資訊,該資訊通過props傳遞給InputGroup
- 一個簡單列表demo就完成了,當在username或者password輸入值或者點選Submit按鈕就會觸發表單的校驗邏輯
App.js
import React, { Component } from 'react'; import InputGroup from './InputGroup'; let requiredExp=/\w{1,}/; class App extends Component { handleSubmit=({model})=>{ console.log('form data is :'+JSON.stringify(model)); } render() { return ( <Form onSubmit={this.handleSubmit}> <Field component={InputGroup} fieldName="username" title="Username" regexp={requiredExp} message="Not be empty"></Field> <Field component={InputGroup} fieldName="address" title="Address"></Field> <Field component={InputGroup} fieldName="password" title="Password" type="password" regexp={requiredExp} message="Not be empty"></Field> <button type="submit">Submit</button> </Form> ); } } export default App;
回撥函式
<Form onSubmit={//}>
只有表單驗證通過了才會觸發<Field onChange={//}>
欄位每次修改都會觸發
class App extends Component { handleSubmit=({model})=>{ //form submit callback console.log('form data is :'+JSON.stringify(model)); } passwordChange=(value,{model,form})=>{ //change callback //value:該欄位的值 //model:為整個表單的資料模型 //form:表單的api中心 console.log(`password:${value}`); } render() { return ( <div> <Form onSubmit={this.handleSubmit} id="form"> <Field component={InputGroup} fieldName="username" title="Username"></Field> <Field component={InputGroup} fieldName="password" title="Password" type="password" onChange={this.passwordChange}></Field> <button type="submit">Submit</button> </Form> </div> ); } }
API
表單例項form可以獲取設定表單的資訊,獲取表單例項的方法有兩種:
- formManager.get(id)
- 回撥函式的引數
表單例項方法:
- setError(fieldName,message)
- clearError(fieldName)
- getModel()
- submit()
import React, { Component } from 'react'
import {Form,Field,formManager} from 'react-vio-form'
let requiredExp=/\w{1,}/;
class App extends Component {
handleSubmit=({model})=>{
//form submit callback
console.log('form data is :'+JSON.stringify(model));
}
handleOutsideSubmit=()=>{
// submit outside Form Component
// param is Form id
formManager.get('form').submit();
}
passwordChange=(value,{model,form})=>{
if(model.password!==model.password2){
//set Error Message
form.setError('password2','password2 must be equaled to password');
}else{
//clear Error Message
form.clearError('password2');
}
}
render() {
return (
<div>
<Form onSubmit={this.handleSubmit} id="form">
<Field component={InputGroup} fieldName="username" title="Username"></Field>
<Field component={InputGroup} fieldName="password" title="Password"
type="password" regexp={requiredExp}
message="Not be empty" onChange={this.passwordChange}></Field>
<Field component={InputGroup} fieldName="password2" title="Password2"
type="password" onChange={this.passwordChange}></Field>
</Form>
<button onClick={this.handleOutsideSubmit}>outside submit</button>
</div>
);
}
}
持續更新中...
反饋與建議
- 直接在github上提issue吧
Thanks
License
MIT © violinux666