问题描述
我使用 react-hook-form
和 Yup
库来管理我的应用程序中的表单。
我正在尝试根据我的组件状态创建动态 Yup 模式。
例如:
import React,{ useContext } from "react";
import { useForm } from "react-hook-form";
import { useHistory } from "react-router-dom";
import { FirstFormContext } from "../context/FirstFormContext";
import { SecondFormContext } from "../context/SecondFormContext";
import { yupResolver } from "@hookform/resolvers/yup";
import * as yup from "yup";
const schema = yup.object().shape({
email: yup.string().email().min(2),// <-- Here I want to access the value
address: yup.string().min(2).max(20)
});
const SecondForm = () => {
const { secondFormData,setSecondFormData } = useContext(SecondFormContext);
const { firstFormData } = useContext(FirstFormContext);
const { register,handleSubmit } = useForm({
resolver: yupResolver(schema),context: firstFormData.type // <---- Passing the variable
});
const history = useHistory();
const onSubmit = (data) => {
setSecondFormData(data);
history.push("/end-page");
};
return (
<form onSubmit={handleSubmit(onSubmit)}>
<button
style={{ display: "block",marginBottom: "20px" }}
onClick={() => history.push("/")}
>
Go back
</button>
{firstFormData.type === "one" ? (
<input
defaultValue={secondFormData.email}
placeholder="email"
{...register("email",{ required: true })}
/>
) : firstFormData.type === "two" ? (
<input
defaultValue={secondFormData.address}
placeholder="address"
{...register("address",{ required: true })}
/>
) : null}
<button type="submit" style={{ display: "block",marginTop: "20px" }}>
Next
</button>
</form>
);
};
export default SecondForm;
如您所见,在我的组件中,我将上下文传递给 useForm
钩子,并且我想在 SecondForm
组件上方的 Yup 架构中访问它。
我怎样才能实现它?
谢谢。
解决方法
我是这样解决的:
在 @client.command()
@commands.has_permissions(kick_members=True)
async def mute(ctx,member: discord.Member):
role = discord.utils.get(ctx.guild.roles,name="Muted")
guild = ctx.guild
if role not in guild.roles:
perms = discord.Permissions(send_messages=False,speak=False)
await guild.create_role(name="Muted",permissions=perms)
await member.add_roles(role)
await ctx.send("Successfully created Muted role and assigned it to mentioned user.")
else:
await member.add_roles(role)
await ctx.send(f"Successfully muted ({member})")
@mute.error
async def mute_error(ctx,error):
if isinstance(error,commands.MissingRole):
await ctx.send("You don't have the 'staff' role")
@mute.error
async def mute_error(ctx,commands.BadArgument):
await ctx.send("That is not a valid member")
钩子内
useForm
在我的 const { register,handleSubmit } = useForm({
resolver: yupResolver(schema),context: { type: firstFormData.type }
});
中:
schema