gpt4 book ai didi

javascript - 在 React 中将 props 传递给 child

转载 作者:行者123 更新时间:2023-12-03 23:35:18 25 4
gpt4 key购买 nike

我正在尝试制作 Formik 包装 需要children作为 Prop 和会渲染放入 中的任何内容.有几种形式可以采用不同的初始值和验证模式等。唯一的共同点是网格布局 .目标是访问 福米克 props 比如子组件中的值、错误等,我不知道如何将它传递给它的子组件。表单域甚至不显示。

包装:

import React from 'react';
import { Formik, FormikConfig, FormikValues } from "formik";
import { Col, Layout, Row } from "antd";

const FormContainer: React.FC<FormikConfig<FormikValues>> = ({ children, ...props }) => {
return <Formik
{...props}
>
{props => (
<Layout>
<Row style={{ height: "100vh", display: "flex", alignItems: "center" }}>
<Col span={12}>
<Layout>
{/*this will be replaced with some background image*/}
<pre>{JSON.stringify(props.values, null, 2)}</pre>
<pre>{JSON.stringify(props.errors, null, 2)}</pre>
</Layout>
</Col>
<Col span={12}>
<Layout>
{/*here goes goes a Form from a different components*/}
{children}
</Layout>
</Col>
</Row>
</Layout>
)}
</Formik>
};

export default FormContainer;

我一定做错了什么。当我包装 FormContainer 时,我无法从其他任何地方获取任何 Formik Prop /值围绕任何东西。

我的表单示例(到目前为止):
import React from "react";
import { Field, Form } from "formik";
import { Col, Form as AntForm, Icon, Input, Row } from "antd";
import { initialValues, validationSchema } from "./fieldValidation";
import FormContainer from "../../../containers/FormContainer/FormContainer";

const RegisterPage: React.FC = () => {
return (
<FormContainer
initialValues={initialValues}
validationSchema={validationSchema}
onSubmit={(data, { setSubmitting }) => {
setSubmitting(true);

setTimeout(() => {
alert(JSON.stringify(data, null, 2));
setSubmitting(false);
}, 5000);
}}
>
{({touched, errors}) => (
<Form>
<Row gutter={[8, 8]}>
<Col span={12}>
<AntForm.Item
help={touched.firstName && errors.firstName ? errors.firstName : ""}
validateStatus={touched.firstName && errors.firstName ? "error" : undefined}
>
<Field
name="firstName"
prefix={<Icon type="solution" style={{ color: "rgba(0,0,0,.25)" }} />}
placeholder="First name"
as={Input}
/>
</AntForm.Item>
</Col>
<Col span={12}>
<AntForm.Item
help={touched.lastName && errors.lastName ? errors.lastName : ""}
validateStatus={touched.lastName && errors.lastName ? "error" : undefined}
>
<Field
name="lastName"
prefix={<Icon type="solution" style={{ color: "rgba(0,0,0,.25)" }} />}
placeholder="Last name"
as={Input}
/>
</AntForm.Item>
</Col>
</Row>
</Form>
)}
</FormContainer>
);
};

export default RegisterPage;

我被困住了。我在这里做错了什么?

最佳答案

以下是如何将 Prop “propsToPass”从 parent 传递给他的所有直接 child :

const Parent = props => {
const { children } = props;

const childrenWithExtraProp = React.Children.map(children, child =>
React.cloneElement(child, { propsToPass: "toChildren" })
);

return <div>{childrenWithExtraProp}</div>;
};

export default Parent;

所以在这种情况下,两个 child 都会有 Prop “propsToPass”
<Parent>
{/* this.props.propsToPass will be available in this component */}
<Child></Child>
{/* this.props.propsToPass will be available in this component */}
<AnotherChild></AnotherChild>
</Parent>

你可以为你的表格做同样的事情。

关于javascript - 在 React 中将 props 传递给 child ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59383580/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com