@uiw/react-native
Version:
UIW for React Native
60 lines • 1.44 kB
JavaScript
import React, { useContext } from 'react';
import { View } from 'react-native';
import { Context } from './hooks/context';
import Label from './comps/label';
import Tip from './comps/tip';
import Container from './comps/container';
import styles from './styles';
const formchildItem = props => {
const {
field,
name = '',
required = false,
validate,
children
} = props;
const {
mode,
innerMethods: {
store = {},
updateStore,
innerValidate
},
watch,
changeValidate
} = useContext(Context);
const change = (field, value) => {
updateStore?.({
store: {
...store,
[field]: value
}
});
watch && watch[field]?.(value);
};
const _renderComponent = children => {
return React.isValidElement(children) ? React.cloneElement(children, {
value: store[field],
onChange: value => {
change(field, value);
if (changeValidate) innerValidate();
}
}) : null;
};
return <Container mode={mode}>
<View style={styles.form_items_container}>
<View style={[styles.form_items, styles.border_none]}>
<Label v={{
name: name,
required: required
}} />
{_renderComponent(children)}
<Tip v={{
validate: validate,
field: field
}} />
</View>
</View>
</Container>;
};
export default formchildItem;