basic,基本问题:如何从表单组件中获取值到应用程序中
basic, basic problem: how to get values from form component into App
所以我已经阅读了 formik 文档,以及十几个 tuts 和示例,但我不了解 formik 和表单的大部分概念。
我正在生成 运行dom 玩家标签,然后让用户评价和组织它们。这一切都是为了帮助我学习反应。我需要从单选框和复选框列表中知道他们想要哪些选项。所以我很想知道在我的应用程序状态(顶级)中,用户选择了哪些选项。这是我的应用程序结构的概述。
function App() {
const [tagInventory, setTagInventory] = useState([]);
const latestTag = tagInventory[tagInventory.length - 1] ? tagInventory[tagInventory.length -1] : null;
const handleAdd = (tag) => {
setTagInventory([ tag, ...tagInventory ]);
}
const makeTag = () => {
// generates a random gamertag
**this is where I'd like to take the options from state and make some logical choices about what each tag looks like**
handleAdd(newTag);
}
return(
// interface to create, delete and rate random gamertags
// maps tagInventory through <Tag> component
<UserForm />
)
//from formik examples:
const UserForm = (props) => {
return (
<div>
<h1>Sign Up</h1>
<Formik
initialValues={{
picked: '',
}}
onSubmit={async (values) => {
await new Promise((r) => setTimeout(r, 500));
alert(JSON.stringify(values, null, 2));
}}
>
{({ values }) => (
<Form>
<div id="my-radio-group">Picked</div>
<div role="group" aria-labelledby="my-radio-group">
<label>
<Field type="radio" name="options" value="bothCaps" />
Capitalize both parts
</label>
<label>
<Field type="radio" name="options" value="frontCap" />
Only capitalize first letter
</label>
<label>
<Field type="radio" name="options" value="allCaps" />
All caps
</label>
<div>Picked: {values.options}</div>
</div>
<button type="submit">Submit</button>
</Form>
)}
</Formik>
</div>
);
}
那么如何将 <UserForm>
中的这些选项放入我的应用程序状态?有一些 critical/basic 我只是不明白 formik/React 我想念的东西。我要设置什么道具?
我看到在 <UserForm>
中我可以访问选择的值,但我不知道如何通过 props 发送它。我尝试制作一个选项挂钩,将挂钩更改函数作为 prop 传递,但是 React 在较低级别的组件 运行 时不喜欢它。
尽量不问愚蠢的问题,但我浏览了大量的帖子、示例和教程,每一个答案都在我的脑海中,假设我知道一些我不知道的东西,或者只包含任何东西UserForm 组件并假设我知道它应该如何与应用程序的其余部分一起工作,但我不知道。
我尝试在 React 中编写一个表单来解决这个问题,但也无济于事。
感谢您的帮助。
将函数传递给 UserForm
并让 UserForm 在需要报告时调用它:
function App () {
// ...
// The name "onFormUpdate" is unimportant.
// Call it whatever makes sense to you.
const onFormUpdate = values => {
// update state or whatever you need to do here
}
return (
<UserForm onUpdate={onFormUpdate} />
);
}
const UserForm = (props) => {
return (
<Formik
onSubmit={async (values) => {
await new Promise((r) => setTimeout(r, 500));
props.onUpdate(values); // call the passed-in function with the new data
}}
>
...
所以我已经阅读了 formik 文档,以及十几个 tuts 和示例,但我不了解 formik 和表单的大部分概念。
我正在生成 运行dom 玩家标签,然后让用户评价和组织它们。这一切都是为了帮助我学习反应。我需要从单选框和复选框列表中知道他们想要哪些选项。所以我很想知道在我的应用程序状态(顶级)中,用户选择了哪些选项。这是我的应用程序结构的概述。
function App() {
const [tagInventory, setTagInventory] = useState([]);
const latestTag = tagInventory[tagInventory.length - 1] ? tagInventory[tagInventory.length -1] : null;
const handleAdd = (tag) => {
setTagInventory([ tag, ...tagInventory ]);
}
const makeTag = () => {
// generates a random gamertag
**this is where I'd like to take the options from state and make some logical choices about what each tag looks like**
handleAdd(newTag);
}
return(
// interface to create, delete and rate random gamertags
// maps tagInventory through <Tag> component
<UserForm />
)
//from formik examples:
const UserForm = (props) => {
return (
<div>
<h1>Sign Up</h1>
<Formik
initialValues={{
picked: '',
}}
onSubmit={async (values) => {
await new Promise((r) => setTimeout(r, 500));
alert(JSON.stringify(values, null, 2));
}}
>
{({ values }) => (
<Form>
<div id="my-radio-group">Picked</div>
<div role="group" aria-labelledby="my-radio-group">
<label>
<Field type="radio" name="options" value="bothCaps" />
Capitalize both parts
</label>
<label>
<Field type="radio" name="options" value="frontCap" />
Only capitalize first letter
</label>
<label>
<Field type="radio" name="options" value="allCaps" />
All caps
</label>
<div>Picked: {values.options}</div>
</div>
<button type="submit">Submit</button>
</Form>
)}
</Formik>
</div>
);
}
那么如何将 <UserForm>
中的这些选项放入我的应用程序状态?有一些 critical/basic 我只是不明白 formik/React 我想念的东西。我要设置什么道具?
我看到在 <UserForm>
中我可以访问选择的值,但我不知道如何通过 props 发送它。我尝试制作一个选项挂钩,将挂钩更改函数作为 prop 传递,但是 React 在较低级别的组件 运行 时不喜欢它。
尽量不问愚蠢的问题,但我浏览了大量的帖子、示例和教程,每一个答案都在我的脑海中,假设我知道一些我不知道的东西,或者只包含任何东西UserForm 组件并假设我知道它应该如何与应用程序的其余部分一起工作,但我不知道。
我尝试在 React 中编写一个表单来解决这个问题,但也无济于事。
感谢您的帮助。
将函数传递给 UserForm
并让 UserForm 在需要报告时调用它:
function App () {
// ...
// The name "onFormUpdate" is unimportant.
// Call it whatever makes sense to you.
const onFormUpdate = values => {
// update state or whatever you need to do here
}
return (
<UserForm onUpdate={onFormUpdate} />
);
}
const UserForm = (props) => {
return (
<Formik
onSubmit={async (values) => {
await new Promise((r) => setTimeout(r, 500));
props.onUpdate(values); // call the passed-in function with the new data
}}
>
...