ReduxForm против tcomb-формы для нативной разработки

Мы использовали ReduxForm в нашем веб-приложении и сейчас пытаемся создать нативное приложение, и кажется, что большинство парней используют tcomb-form.

ReduxForm можно использовать для нативной разработки. Не уверен, что является самым большим преимуществом использования tcomb-формы.

Я попытался использовать его (пока не изучал все расширенные функции), как только мы определяем схему, базовая визуализация элементов управления выполняется для вас. Однако, если вы хотите настроить отображение элемента управления, я не уверен, поддерживает ли tcomb-form его.

Пример:

Здесь, в методе render() моего компонента:

let Form= tFormNative.form.Form;

        let options= {
            fields: {
            }
        };

        let username= {
            label: I18n.t('LoginForm.username'),
            maxLength: 12,
            editable: true,

        };

        let email = {
            label: I18n.t('LoginForm.email'),
            keyboardType: 'email-address',
            editable: true,

        };

        let password = {
            label: I18n.t('LoginForm.password'),
            maxLength: 12,
            secureTextEntry: true,
            editable: true,
        };

        let registerForm = tFormNative.struct({
            username: tFormNative.String,
            email: tFormNative.String,
            password: tFormNative.String,
            passwordReEnter: tFormNative.String,
        });

  return(
     <View style={styles.container}>
            <Form 
                style={styles.textInput}
                ref='form'
                type={registerForm}
                options={options}
            />
         </View>
  );

Теперь Label и Control (на основе типа, который вы указали в struct()) созданы.

Как бы то ни было, давайте скажем, что я хочу использовать иконку с меткой для каждого элемента управления, я не уверен, разрешено ли это.

Цените любые входные данные.

Спасибо Сатиш

2 ответа

Если вы хотите настроить весь элемент управления, который вы можете использовать для фабрики, я опубликую пример ползунка, который я использую для ввода чисел. Я не пробовал ReduxForm, но мне очень нравится tcomb-form, и я не вижу ничего, что не могло бы быть выполнимо с точки зрения настройки. Удачи тебе!

import React from 'react';
import { View, Text, Slider } from 'react-native';
import t from 'tcomb-form-native';
import Strings from '../config/strings.js';

var Component = t.form.Component;

class TcombSlider extends Component {

    constructor(props) {
        super(props);
        var locals = super.getLocals();
    }

    getLocals() {
        var locals = super.getLocals();
        return locals;
    }

    getTemplate() {
        let self = this;
        return function (locals) {
            var sliderConfig = locals.config.slider; 
            var stylesheet = locals.stylesheet;
            var formGroupStyle = stylesheet.formGroup.normal;
            var controlLabelStyle = stylesheet.controlLabel.normal;
            var checkboxStyle = stylesheet.checkbox.normal;
            var helpBlockStyle = stylesheet.helpBlock.normal;
            var errorBlockStyle = stylesheet.errorBlock;

            if (locals.hasError) {
                formGroupStyle = stylesheet.formGroup.error;
                controlLabelStyle = stylesheet.controlLabel.error;
                checkboxStyle = stylesheet.checkbox.error;
                helpBlockStyle = stylesheet.helpBlock.error;
            }

            var label = locals.label ? <Text style={controlLabelStyle}>{locals.label}</Text> : null;
            var help = locals.config.help ? <Text style={helpBlockStyle}>{locals.config.help}</Text> : null;
            var error = locals.hasError && locals.error ? <Text accessibilityLiveRegion="polite" style={[errorBlockStyle, {marginTop: 2}]}>{locals.error}</Text> : null;

            return (
                <View style={formGroupStyle}>
                  {label}
                  <View style={{flex: 1, flexDirection: 'row', justifyContent: 'flex-end', paddingRight: 15}}>
                    <Text>{locals.value}m</Text>
                  </View>  
                  <View style={{marginBottom: 5}}>
                    <Slider
                      minimumValue={sliderConfig.minimumValue}
                      maximumValue={sliderConfig.maximumValue}
                      step={sliderConfig.step}
                      value={locals.value}
                      onValueChange={(value) => self._onChange(locals, value)}/>
                  </View>
                  {help}
                  {error}
                </View>
            );
        }
    }

    _onChange(locals, val) {
        locals.onChange(val);
    }
}

export default TcombSlider

И используйте это так:

const options = {
    fields: {
        search_range: {
            config: {
            slider: {
                maximumValue: 1000,
                minimumValue: 0,
                step: 5,
                disabled: false,
            },
         },
         factory: TcombSlider,
       },
       ...
   },
}

Я публикую это как пример, потому что мне было трудно собрать свою первую фабрику.

Я бы оставил это как комментарий, если бы мог, но моя репутация недостаточно высока.

Вам нужно переопределить локальный шаблон формы с помощью пользовательского шаблона, который добавляет Icon и TextInput для каждого поля.
Эта суть показывает, как вы можете это сделать.

Другие вопросы по тегам