【发布时间】:2018-12-12 01:22:21
【问题描述】:
当前平台:NodeJS(最小)、客户端 React w/Redux、Formik、是的。
给出以下示例代码(不包括整个 React 组件代码,因为它与问题无关):
class RegisterPage extends React.Component {
constructor(props) {
super(props);
}
// (...)
render () {
<Form>
<Field name="email" type="email" />
<Field name="password" type="password" />
<Field
name="myCheckbox"
type="checkbox"
checked={this.props.values.myCheckbox}
onChange={ ?????????? } />
</Form>
}
}
const handleFormSubmission = (values, { resetForm, setErrors, setSubmitting }) => {
console.log(values);
};
const handleFormChange = (event) => {
event.persist();
console.log('changed');
};
const MyFormik = withFormik({
mapPropsToValues ({ email, password, myCheckbox }) {
return {
email: email || '',
password: password || '',
myCheckbox: myCheckbox || false
}
},
validationSchema: (...Yup schema here...),
handleSubmit (values, bag) { return handleFormSubmission(values, bag); }
})(RegisterPage);
export default connect()(MyFormik);
...如何使用 handleChange 方法?在添加处理复选框更改的代码时,我需要保留原来的那个(来自 Formik 的那个)。有一些组件行为取决于该复选框的选中值。
请注意,我没有将 onChange 属性传递给电子邮件或密码,因为在这些属性上没有额外的代码行为。复选框是具有特殊行为的复选框。
【问题讨论】:
-
不清楚你在问什么。你尝试过什么吗?该字段的自定义 onChange 与
Formik? 中的一个重叠 -
withFormik() 负责将 onChange 处理程序显式传递给表单内的每个输入。这就是为什么电子邮件和密码没有通过 onChange 属性传递的原因:withFormik 会为您处理更改。但是,当您确实需要在更改事件中执行某些任务时,您可以指定要调用哪个处理程序,但我不知道如何指定它。 withFormik 的配置对象只支持handleSubmit。所以我需要知道如何传入handleChange,这样我就可以持久化formik的处理并为其添加自定义代码。
-
您是否尝试在
onChange中放置一个处理程序?看看stackoverflow.com/questions/48466920/… -
Ohhhh....不,我没有尝试在 onChange 属性中传递箭头函数...好的,我会尝试,我会回来分享结果。跨度>
-
是的!做到了!我会在下面发布一个答案,但我会保持打开状态,以防万一有人想出更好的东西 ;-) 谢谢伙计!