我正在尝试创建一个自定义窗体控件,即屏幕上的列表选择器(无模式或本机ios选择器)。自定义控件不包含任何TextInput o Picker控件。如何处理状态更改和更新表单状态?
我正在使用Formik。在formik中,我需要使用handleChange事件来更新表单值和验证数据,但是我不知道如何调用它。 ?
class ProfileForm extends Component {
state = {
selectedPaymentMethod: this.props.paymentMethod
};
render() {
return(
<Fragment>
<TextInput
value={this.props.values.name}
onChangeText={this.props.handleChange('name')} // it works
<List.Item // a list picker item
title="Card"
onPress={() => {
this.setState({ selectedPaymentMethod: 0 });
this.props.handleChange('paymentMethod', 1)}; // it don't
} />
<List.Item // another list picker item
title="Cash"
onPress={() => {
this.setState({ selectedPaymentMethod: 1 });
this.props.handleChange('paymentMethod', 0)}; // it don't
} />
</Fragment>
);
}
}
主要思想是使列表项选择器更加简洁,并调用formik handleChange事件。
答案 0 :(得分:1)
我从没使用过formik,但是我认为无论如何都不应该在onChangeText属性中执行函数。您只能传递参考。
onChangeText={() => this.props.handleChange('name')}
答案 1 :(得分:0)
好的,我终于明白了。 Formik具有setFieldValue方法(https://jaredpalmer.com/formik/docs/api/formik#setfieldvalue-field-string-value-any-shouldvalidate-boolean-void) 我在onPress方法中调用了它,并且可以正常工作。