@fairys/taro-valtio-form-basic
v1.0.3
Published
taro表单框架组件
Readme
taro-valtio-form-basic
安装
npm install @fairys/taro-valtio-form-basic # yarn add @fairys/taro-valtio-form-basic # pnpm add @fairys/taro-valtio-form-basic表单参数
类型
部分参数依赖基础表单组件概览
布局
import type { FairysValtioFormLayoutAttrsProps } from '@fairys/valtio-form-basic';
export interface FairysTaroValtioFormLayoutProps extends FairysValtioFormLayoutAttrsProps {}
export declare function FairysTaroValtioFormLayout(props: FairysTaroValtioFormLayoutProps): import("react/jsx-runtime").JSX.Element;
表单项
/**表单项*/
import type { ViewProps } from '@tarojs/components';
import type { FairysValtioFormItemAttrsProps, MObject } from '@fairys/valtio-form-basic';
export interface FairysTaroValtioFormItemProps<T extends MObject<T> = Record<string, any>> extends Omit<ViewProps, 'style'>, FairysValtioFormItemAttrsProps {
/**是否使用控制隐藏的表单项*/
isHide?: boolean;
/**是否使用无样式表单项*/
noStyle?: boolean;
}
/**普通表单项*/
export declare function FairysTaroValtioFormItemBase<T extends MObject<T> = Record<string, any>>(props: Omit<FairysTaroValtioFormItemProps<T>, 'isHide' | 'noStyle'>): import("react/jsx-runtime").JSX.Element;
/**控制隐藏的表单项*/
export declare function FairysTaroValtioFormHideItem<T extends MObject<T> = Record<string, any>>(props: Omit<FairysTaroValtioFormItemProps<T>, 'isHide' | 'noStyle'>): import("react/jsx-runtime").JSX.Element;
/**无样式表单项*/
export declare function FairysTaroValtioFormItemNoStyle<T extends MObject<T> = Record<string, any>>(props: Omit<FairysTaroValtioFormItemProps<T>, 'isHide' | 'noStyle'>): import("react/jsx-runtime").JSX.Element;
/**表单项基础组件(根据isHide和noStyle判断是否使用控制隐藏的表单项和无样式表单项)*/
export declare function FairysTaroValtioFormItem<T extends MObject<T> = Record<string, any>>(props: FairysTaroValtioFormItemProps<T>): import("react/jsx-runtime").JSX.Element;
表单
import React from 'react';
import { FairysTaroValtioFormItem, FairysTaroValtioFormHideItem, FairysTaroValtioFormItemBase } from './form.item';
import { useFairysValtioFormInstance, useFairysValtioFormInstanceContext, useFairysValtioFormInstanceContextState, useFairysValtioFormInstanceContextHideState } from '@fairys/valtio-form-basic';
import type { FairysValtioFormAttrsProps, FairysValtioFormInstance, MObject } from '@fairys/valtio-form-basic';
export interface FairysTaroValtioFormProps<T extends MObject<T> = Record<string, any>> extends FairysValtioFormAttrsProps<T> {}
declare function FairysTaroValtioFormBase<T extends MObject<T> = Record<string, any>>(props: FairysTaroValtioFormProps<T>, ref: React.Ref<FairysValtioFormInstance<T>>): import("react/jsx-runtime").JSX.Element;
export declare const FairysTaroValtioForm: typeof FairysTaroValtioFormBase & {
/**初始化实例*/
useForm: typeof useFairysValtioFormInstance;
/**获取状态*/
useFormState: typeof useFairysValtioFormInstanceContextState;
/**获取隐藏状态*/
useFormHideState: typeof useFairysValtioFormInstanceContextHideState;
/**获取上下文实例*/
useFormInstance: typeof useFairysValtioFormInstanceContext;
/**表单项基础组件*/
FormItemBase: typeof FairysTaroValtioFormItemBase;
/**表单项组件*/
FormItem: typeof FairysTaroValtioFormItem;
/**隐藏表单项组件*/
FormHideItem: typeof FairysTaroValtioFormHideItem;
};
案例
引入样式
import '@fairys/valtio-form-basic/esm/styles/index.css';基础使用
import { View } from '@tarojs/components';
import { Button, Input } from '@nutui/nutui-react-taro';
import { FairysTaroValtioForm } from '@fairys/taro-valtio-form-basic';
interface State {
username?: string;
username2?: string;
username3?: string;
username4?: string;
}
function Basic() {
const form = FairysTaroValtioForm.useForm<State>();
const onSubmit = async () => {
try {
const values = await form.validate();
console.log(values);
} catch (error) {
console.log(error);
}
};
return (
<View style={{ padding: 20 }}>
<FairysTaroValtioForm<State>
form={form}
rules={{
username: [{ required: true, message: '请输入用户名' }],
}}
>
<FairysTaroValtioForm.FormItem name="username" label="用户名">
<Input placeholder="请输入" />
</FairysTaroValtioForm.FormItem>
<FairysTaroValtioForm.FormItem rules={[{ required: true, message: '请输入用户名2' }]} name="username2" label="用户名2">
<Input placeholder="请输入" />
</FairysTaroValtioForm.FormItem>
<FairysTaroValtioForm.FormItem rules={[{ required: true, message: '请输入用户名3' }]} name="username3" label="用户名3">
<Input placeholder="请输入" />
</FairysTaroValtioForm.FormItem>
<FairysTaroValtioForm.FormItem rules={[{ required: true, message: '请输入用户名4' }]} name="username4" label="用户名4">
<Input placeholder="请输入" />
</FairysTaroValtioForm.FormItem>
<Button onClick={onSubmit}>提交</Button>
</FairysTaroValtioForm>
</View>
);
}
export default Basic;
隐藏表单
import { View } from '@tarojs/components';
import { Button, Input } from '@nutui/nutui-react-taro';
import { FairysTaroValtioForm } from '@fairys/taro-valtio-form-basic';
interface State {
username?: string;
隐藏表单项?: string;
}
function Basic() {
const form = FairysTaroValtioForm.useForm<State>();
const onSubmit = async () => {
try {
const values = await form.validate();
console.log(values);
} catch (error) {
console.log(error);
}
};
return (
<View style={{ padding: 20 }}>
<FairysTaroValtioForm<State>
form={form}
rules={{
username: [{ required: true, message: '请输入用户名' }],
}}
>
<FairysTaroValtioForm.FormItem
name="username"
label="输入5隐藏表单项"
onAfterUpdate={(value) => {
console.log('value', value);
form.updatedHideInfo({ 隐藏表单项: value === '5' });
}}
>
<Input placeholder="请输入" />
</FairysTaroValtioForm.FormItem>
<FairysTaroValtioForm.FormHideItem
rules={[{ required: true, message: '请输入隐藏表单项' }]}
name="隐藏表单项"
label="隐藏表单项"
>
<Input placeholder="请输入隐藏表单项" />
</FairysTaroValtioForm.FormHideItem>
<Button onClick={onSubmit}>提交</Button>
</FairysTaroValtioForm>
</View>
);
}
export default Basic;监听表单
import { View } from '@tarojs/components';
import { Button, Input } from '@nutui/nutui-react-taro';
import { FairysTaroValtioForm } from '@fairys/taro-valtio-form-basic';
interface State {
username?: string;
}
const Cusotm = () => {
const [formState] = FairysTaroValtioForm.useFormState<State>();
return <View>{formState.username}</View>;
};
function Basic() {
const form = FairysTaroValtioForm.useForm();
const onSubmit = async () => {
try {
const values = await form.validate();
console.log(values);
} catch (error) {
console.log(error);
}
};
const formState = FairysTaroValtioForm.useFormInstanceToState(form);
return (
<View style={{ padding: 20 }}>
<View>用户名:{formState.username}</View>
<FairysTaroValtioForm
form={form}
rules={{
username: [{ required: true, message: '请输入用户名' }],
}}
>
<FairysTaroValtioForm.FormItem name="username" label="用户名">
<Input placeholder="请输入" />
</FairysTaroValtioForm.FormItem>
<FairysTaroValtioForm.FormItem label="监听数据渲染">
<Cusotm />
</FairysTaroValtioForm.FormItem>
<Button onClick={onSubmit}>提交</Button>
</FairysTaroValtioForm>
</View>
);
}
export default Basic;
