如何在没有inputText的情况下在自定义窗体控件中处理事件

时间:2019-09-09 21:25:13

标签: reactjs react-native formik form-control

我正在尝试创建一个自定义窗体控件,即屏幕上的列表选择器(无模式或本机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事件。

2 个答案:

答案 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方法中调用了它,并且可以正常工作。