【发布时间】:2020-10-20 10:53:34
【问题描述】:
上下文: 我尝试根据我们的步骤构建一个带有钩子和渲染组件的表单。
问题: 我收到这条消息:“错误:UserFormHooks(...): 渲染没有返回任何内容。这通常意味着缺少返回语句。或者,不渲染任何内容,返回 null。”
我知道代码可以与类一起使用,但不能与钩子一起使用。
我尝试了什么:我尝试将它们放入三元组,但它也不起作用。
代码:
import React, { useState } from "react";
import FormUserDetails from "./FormUserDetails";
import FormPersonalDetails from "./FormPersonalDetails";
import Confirm from "./Confirm";
import Success from "./Success";
const UserFormHooks = () => {
const [data, setData] = useState({
step: 1,
firstName: "",
lastName: "",
email: "",
occupation: "",
city: "",
bio: "",
});
// Proceed to next step
const nextStep = () => {
setData(step + 1);
};
// Go back to prev step
const prevStep = () => {
setData(step - 1);
};
// Handle fields change
const handleChange = (input) => (e) => {
setData({ [input]: e.target.value });
};
const { step } = { data };
const { firstName, lastName, email, occupation, city, bio } = { data };
const values = { firstName, lastName, email, occupation, city, bio };
switch (step) {
case 1:
return (
<div>
<FormUserDetails
nextStep={nextStep}
handleChange={handleChange}
values={values}
/>
</div>
);
case 2:
return (
<div>
<FormPersonalDetails
nextStep={nextStep}
prevStep={prevStep}
handleChange={handleChange}
values={values}
/>
</div>
);
case 3:
return (
<Confirm nextStep={nextStep} prevStep={prevStep} values={values} />
);
case 4:
return <Success />;
default:
console.log("This is a multi-step form built with React.");
}
};
export default UserFormHooks;
【问题讨论】:
-
暂时忽略您的主要问题,钩子中的状态不会那样工作。您需要为每个状态变量创建一个单独的行,例如
const [firstname, setFirstname] = useState("");,或者创建data的完整副本,更改一个字段,然后调用setData(changedCopyOfData); -
另外,解构赋值的工作方式类似于
const { step } = data;,你所拥有的相当于const { step } = { data: data };,它的右侧有一个没有step属性的对象。跨度>
标签: javascript reactjs forms react-hooks