gpt4 book ai didi

react-native - 如何使用 Formik 在 headerRight 中触发函数?

转载 作者:行者123 更新时间:2023-12-04 04:06:04 26 4
gpt4 key购买 nike

我是 react-native 和 formik 的新手,我遇到了我试图建立的这个问题。

如何使用 Formik 在 headerRight 中触发函数?我有 updateCorporation 函数可以触发 api,formik 将完成触发这个函数的工作,在我按下更新按钮后,但结果未定义
我不明白为什么会这样。

文件_1.js

const CorporationContainer = (props) => {
const {
navigation,
} = props;

const updateCorporation = (values) => {
// do patch stuff with values
// but its undefined
};

useEffect(() => {
navigation.setParams({ updateCorporation: updateCorporation.bind() });
}, []);

return (
<Corporation
updateCorporation={updateCorporation} />
);
};

CorporationContainer.navigationOptions = ({ navigation }) => ({
headerRight: (
<EditBtn
onPress={() => navigation.state.params.updateCorporation()}
>
<EditText>Update</EditText>
</EditBtn>
),
});

export default CorporationContainer;

File_2.js
const Corporation = (props) => {
const {
updateCorporation,
} = props;

const emailField = useRef(null);

const validationSchema = yup.object().shape({
email: yup.string()
.ensure()
.email('Email must be valid')
.required('Email'),
});

return (
<Formik
initialValues={{
email,
}}
onSubmit={values => updateCorporation(values)}
validateOnBlur={false}
validateOnChange={false}
validationSchema={validationSchema}
>
{(formProps) => {
const {
errors,
setFieldValue,
values,
} = formProps;
return (
<Container>
<Input
name="email"
placeholder="Email Corporation"
textContentType="emailAddress"
keyboardType="email-address"
returnKeyType="done"
autoCapitalize="none"
autoCorrect={false}
ref={emailField}
value={values.email}
onChangeText={setFieldValue}
editable={!email}
error={errors.email}}
/>
</Container>
);
}}
</Formik>
);
};

export default Corporation;

最佳答案

在 File_1.js 中,我必须使用 withForm并删除 File_2.js 中的所有 Formik 内容并改用 Prop 。

const CorporationContainer = (props) => {
const {
navigation,
handleSubmit,
errors,
setFieldValue,
values,
} = props;

useEffect(() => {
navigation.setParams({ updateCorporation: handleSubmit.bind() });
}, []);

return (
<ProfileProfessional
errors={errors}
setFieldValue={setFieldValue}
values={values}
/>
);
};

CorporationContainer.navigationOptions = ({ navigation }) => ({
headerRight: (
<EditBtn
onPress={() => navigation.state.params.updateCorporation()}
>
<EditText>Editar</EditText>
</EditBtn>
),
});

export default withFormik({
// ...
})(CorporationContainer);

关于react-native - 如何使用 Formik 在 headerRight 中触发函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56675671/

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