如何将样式化的组件而不是字符串消息传递给 formik 的感谢响应
How to pass a styled component instead of string message to formik's thanks response
我的 formik 联系表单 return 在成功提交后表单下有一个 "thanks" 字符串,我希望它成为 return 样式化的组件,以便可以对其进行样式化。
这条成功的 return 字符串 "thanks" 消息,尽管它没有样式:
const ContactForm = () => {
const classes = useStyles()
const [serverState, setServerState] = useState()
const handleServerResponse = (ok, msg) => {
setServerState({ ok, msg })
}
const handleOnSubmit = (values, actions) => {
axios({
method: "POST",
url: "https://formspree.io/user-id",
data: values
})
.then(response => {
actions.setSubmitting(false)
actions.resetForm()
handleServerResponse(true, "Thanks!") //returns unstyled string at the bottom of the page
})
.catch(error => {
console.log(error)
actions.setSubmitting(false);
handleServerResponse(false, error.response.data.error);
})
}
这个return什么都没有:
const ContactForm = () => {
const classes = useStyles()
const [serverState, setServerState] = useState()
const handleServerResponse = (ok, msg) => {
setServerState({ ok, msg })
}
const handleOnSubmit = (values, actions) => {
axios({
method: "POST",
url: "https://formspree.io/user-id",
data: values
})
.then(response => {
actions.setSubmitting(false)
actions.resetForm()
handleServerResponse(true, () => {
return (
<Thanks>Thanks!</Thanks> // styled component I'd like to return
)
}
)
})
.catch(error => {
console.log(error)
actions.setSubmitting(false);
handleServerResponse(false, error.response.data.error);
})
}
如何在这里成功引用自己的组件?这是我整理的codesandbox
我会这样做:
const ContactForm = () => {
const classes = useStyles()
const [serverState, setServerState] = useState()
const handleServerResponse = (ok, msg) => {
setServerState({ ok, msg })
}
const handleOnSubmit = (values, actions) => {
axios({
method: "POST",
url: "https://formspree.io/user-id",
data: values
})
.then(response => {
actions.setSubmitting(false)
actions.resetForm()
handleServerResponse(true, "Thanks!") //returns unstyled string at the bottom of the page
})
.catch(error => {
console.log(error)
actions.setSubmitting(false);
handleServerResponse(false, error.response.data.error);
})
}
if (serverState && serverState.ok && serverState.msg) return <Thanks>{ serverState.msg }</Thanks>;
如果您还需要显示表格或其他内容,请在现有 return :).
中包含条件
例如
return (
<Fragment>
<form>
...
</form>
{ serverState && serverState.ok && serverState.msg && (
<Thanks>{ serverState.msg }</Thanks>
)}
</Fragment>
);
我的 formik 联系表单 return 在成功提交后表单下有一个 "thanks" 字符串,我希望它成为 return 样式化的组件,以便可以对其进行样式化。
这条成功的 return 字符串 "thanks" 消息,尽管它没有样式:
const ContactForm = () => {
const classes = useStyles()
const [serverState, setServerState] = useState()
const handleServerResponse = (ok, msg) => {
setServerState({ ok, msg })
}
const handleOnSubmit = (values, actions) => {
axios({
method: "POST",
url: "https://formspree.io/user-id",
data: values
})
.then(response => {
actions.setSubmitting(false)
actions.resetForm()
handleServerResponse(true, "Thanks!") //returns unstyled string at the bottom of the page
})
.catch(error => {
console.log(error)
actions.setSubmitting(false);
handleServerResponse(false, error.response.data.error);
})
}
这个return什么都没有:
const ContactForm = () => {
const classes = useStyles()
const [serverState, setServerState] = useState()
const handleServerResponse = (ok, msg) => {
setServerState({ ok, msg })
}
const handleOnSubmit = (values, actions) => {
axios({
method: "POST",
url: "https://formspree.io/user-id",
data: values
})
.then(response => {
actions.setSubmitting(false)
actions.resetForm()
handleServerResponse(true, () => {
return (
<Thanks>Thanks!</Thanks> // styled component I'd like to return
)
}
)
})
.catch(error => {
console.log(error)
actions.setSubmitting(false);
handleServerResponse(false, error.response.data.error);
})
}
如何在这里成功引用自己的组件?这是我整理的codesandbox
我会这样做:
const ContactForm = () => {
const classes = useStyles()
const [serverState, setServerState] = useState()
const handleServerResponse = (ok, msg) => {
setServerState({ ok, msg })
}
const handleOnSubmit = (values, actions) => {
axios({
method: "POST",
url: "https://formspree.io/user-id",
data: values
})
.then(response => {
actions.setSubmitting(false)
actions.resetForm()
handleServerResponse(true, "Thanks!") //returns unstyled string at the bottom of the page
})
.catch(error => {
console.log(error)
actions.setSubmitting(false);
handleServerResponse(false, error.response.data.error);
})
}
if (serverState && serverState.ok && serverState.msg) return <Thanks>{ serverState.msg }</Thanks>;
如果您还需要显示表格或其他内容,请在现有 return :).
中包含条件例如
return (
<Fragment>
<form>
...
</form>
{ serverState && serverState.ok && serverState.msg && (
<Thanks>{ serverState.msg }</Thanks>
)}
</Fragment>
);