Formik с использованием React Native Switch - PullRequest
0 голосов
/ 29 января 2019

Моя цель - использовать пользовательский компонент на основе Switch (из React Native) в форме Formik.Вот код компонента формы:

class NewPreferences extends React.Component {
render() {
    return(
        <View style={styles.mainContainer}>
            <View style={styles.newPreferencesContainer}>
                <Formik
                    initialValues={{
                        food: true
                    }}
                    onSubmit={async (values, action) => {
                        await this.props.onSubmitPress(values)
                        action.setSubmitting(false)
                    }}
                    render={({
                        values,
                        errors,
                        touched,
                        handleChange,
                        handleBlur,
                        handleSubmit,
                        isSubmitting,
                    }) => (
                        <View style={styles.formikNewPreferences}>
                            <View style={styles.itemRow}>
                                <Field
                                    source={images.food.uri}
                                    onChange={handleChange('food')}
                                    value={values.food}
                                    name="food"
                                    component={ToggleButton}
                                />

                            </View>
                            <TouchableOpacity
                                style={styles.button}
                                onPress={handleSubmit}
                                disabled={isSubmitting}
                            >
                                <Text>Login</Text>
                            </TouchableOpacity>
                        </View>
                    )}
                    />
            </View>
        </View>
    );
}

Компонент ToggleButton следующий:

class ToggleButton extends React.Component<ToggleButtonInterface> {
render() {
    return(
        <View>
            <Image
                source={this.props.source}
            />
            <Switch
                onValueChange={this.props.onChange}
                value={this.props.value}
                />
        </View>

    );
}

}

Похоже, что переключение Switchэлемент вызывает ошибку: undefined is not an object (evaluating '_a.type'), в методе _handleChange из Switch.Следуя документации Formik, я подумал, что мне просто нужно передать handleChange Formik в реквизитах моего пользовательского компонента, чтобы при переключении Switch Formik изменил свое состояние, что затем изменит реквизиты value of Switch.Может ли кто-нибудь помочь мне в этом вопросе?

1 Ответ

0 голосов
/ 27 февраля 2019

Formik's handleChange ожидает вызова с React.ChangeEvent.Поскольку onValueChange компонента Switch будет просто вызываться с логическим значением, вам необходимо использовать setFieldValue от Formik для обработки изменения.

<Formik
  initialValues={{ switch: false }}
  onSubmit={ values => console.log(values) }
>
  {props => (
      <Switch
        value={props.values.switch}
        onValueChange={value =>
          props.setFieldValue('switch', value)
        }
      />
  )}
</Formik>
...