Я пытаюсь создать функцию, которая будет увеличивать каждый раз, когда пользователь вводит поле.
В настоящее время у меня есть родительский компонент, состояние которого со значением счетчика, установленным в 0.мой дочерний компонент является контейнерным компонентом Formik, который содержит и обрабатывает мое поле.
// Родительский компонент
import React, { Component } from "react";
import Formik from "./Formik";
export default class BountyPage extends Component {
state = {
total: 0
};
render() {
return (
<div className="bountyPage">
<div className="total_container">
<p className="total_title pt-2">SERV</p>
<h1 className="total_sub">{this.state.total}</h1>
</div>
<Formik />
</div>
);
}
}
// Дочерний компонент
const Formik = ({ values, errors, touched, isSubmitting,
setFieldValue }) => (
<Form className="form">
{touched.lastName &&
values.lastName &&
touched.firstName &&
values.firstName ? (
<Row>
<Col className="result_text pulse animated p-4">
<b>Welcome</b>{" "}
<span
className="clickable_text"
onClick={async () => {
await setFieldValue("firstName", "");
await setFieldValue("lastName", "");
}}
>
{values.firstName} {values.lastName}
</span>
</Col>
</Row>
) : (
<Row className="glow_form p-1">
<Col md={6}>
<FormGroup>
<Label for="firstName">First Name</Label>
<Field
type="firstName"
name="firstName"
placeholder="ie. John"
className="form-control"
/>
{touched.firstName && errors.firstName && <p>
{errors.firstName}</p>}
</FormGroup>
</Col>
<Col md={6}>
<FormGroup>
<Label for="lastName">Last Name</Label>
<Field
type="lastName"
name="lastName"
placeholder="ie. Doe"
className="form-control"
/>
{touched.lastName && errors.lastName && <p>
{errors.lastName}</p>}
</FormGroup>
</Col>
</Row>
)}
<Row className="glow_form pt-1">
<Col>
<FormGroup>
<Label for="email">Bittrex Email Address</Label>
<Field
type="email"
name="email"
placeholder="ie. example@domain.com"
className="form-control"
/>
{touched.email && errors.email && <p>{errors.email}</p>}
</FormGroup>
</Col>
</Row>
<Row>
<Col className="col_container">
<FormGroup>
<div className="switch_container">
<p>I’m a business owner</p>
<label className="switch">
<Field type="checkbox" name="switch1" checked=
{values.switch1} />
<span className="slider round" />
</label>
</div>
</FormGroup>
{values.switch1 && (
<Row className="bounceInDown animated">
<Col md={6}>
<FormGroup>
<Field
type="text"
name="industryText"
placeholder="ie. Automotive"
className="form-control"
/>
</FormGroup>
</Col>
<Col md={6}>
<FormGroup>
<Field
type="number"
name="locationText"
placeholder="ie. 1-2"
className="form-control"
/>
</FormGroup>
</Col>
</Row>
)}
</Col>
</Row>
{values.firstName && values.lastName ? (
<Row>
<Col className="text-center">
{values.email ? (
<span>
<Button
type="submit"
disabled={isSubmitting}
className="submit_btn"
>
Review
</Button>
<hr />
</span>
) : (
<span>
<Button
type="submit"
disabled={isSubmitting}
className="submit_btn"
>
Submit
</Button>
<hr />
</span>
)}
</Col>
</Row>
) : (
""
)}
</Form>
);
export default withFormik({
mapPropsToValues({
firstName,
lastName,
email,
switch1,
industryText,
locationText,
checkbox
}) {
return {
firstName: firstName || "",
lastName: lastName || "",
email: email || "",
switch1: switch1 || false,
industryText: industryText || "",
locationText: locationText || "",
checkbox: checkbox || false
};
},
validationSchema: Yup.object().shape({
firstName: Yup.string()
.max(40, "Please enter no more than 40 characters")
.required("Please enter your first name"),
lastName: Yup.string()
.max(40, "Please enter no more than 40 characters")
.required("Please enter a last name"),
email: Yup.string()
.email("Please enter a valid email")
.required("Please enter an email")
}),
handleSubmit(values, { resetForm }) {
console.log(values);
resetForm();
}
})(Formik);
![The current UI](https://i.stack.imgur.com/hMlzj.png)
Как мнеполучить доступ к этим «значениям» из контейнера formik в моем родительском компоненте, чтобы я мог увеличивать состояние счетчика, чтобы динамический счетчик увеличивался при каждом заполнении поля?Я пытался создать функцию обратного вызова, но не передавал ее должным образом, поскольку не знаю, как работает контейнер компонента formik.