【发布时间】:2020-09-09 08:00:42
【问题描述】:
我正在制作一个食谱盒应用程序,我决定从我的handleTitle 和handleInput 方法开始。我能够把它拉出来,但现在我想创建一个对象数组(对象包含标题和描述),然后我会映射这个数组并显示数据。
但是我的handleSubmit 函数没有按照我想要的方式工作。我希望用户能够编写多个标题和描述,并且这些将继续添加到该状态的食谱数组中。看一下代码:
import React, { useState } from "react";
import "./styles.css";
import { Form } from "./components/containers/Form";
export default function App() {
const [title, setTitle] = useState("");
const [description, setDescription] = useState("");
const [recipe, setRecipe] = useState([]);
const handleTitle = e => {
setTitle(e.target.value);
};
const handleDescription = e => {
setDescription(e.target.value);
};
const handleSubmit = e => {
e.preventDefault();
if (title !== "" && description !== "") {
setRecipe(prevState => {
const data = { title: title, description: description };
return {
...prevState,
recipe: prevState.recipe.concat(data)
};
});
}
};
return (
<div className="App">
<Form
title={title}
description={description}
handleTitle={handleTitle}
handleDescription={handleDescription}
handleSubmit={handleSubmit}
/>
</div>
);
}
import React from "react";
export const Form = ({
handleTitle,
handleDescription,
handleSubmit,
title,
description
}) => {
return (
<div>
<form onSubmit={handleSubmit}>
<input
type="text"
onChange={handleTitle}
placeholder="title"
value={title}
/>
<input
type="text"
onChange={handleDescription}
placeholder="description"
value={description}
/>
<button>Add</button>
</form>
</div>
);
};
【问题讨论】:
-
如果你要做很多表格,我建议使用Formik。
-
recipe是一个数组,所以需要设置为[...prevState, data]。 -
这能回答你的问题吗? Push method in React Hooks (useState)?
标签: javascript reactjs