【发布时间】:2020-03-25 12:00:22
【问题描述】:
我有一个有 2 个输入的应用程序;名称和密码。另外,我有一个保存按钮,它应该使用父组件中的输入值来更改状态。
但是现在,如果我在一个输入中只插入一个值,我会丢失父组件中的状态。例如,如果我只输入名称,然后单击保存按钮,在父组件中我会丢失密码值,但我不知道为什么。
如何使用我的代码避免这种情况?
import React, { useEffect } from "react";
import "./styles.css";
const Test = ({ user, setUser }) => {
const [u, setU] = React.useState("");
const [p, setP] = React.useState("");
function name(e) {
const a = e.target.value;
setU(a);
}
function password(e) {
const a = e.target.value;
setP(a);
}
function save() {
console.log(u);
setUser({ ...user, name: u, password: p });
}
return (
<div>
<input onChange={name} />
<input onChange={password} />
<button onClick={save}>save</button>
</div>
);
};
export default function App() {
const [user, setUser] = React.useState({
name: "",
password: ""
});
useEffect(() => {
setUser({ name: "john", password: "Doe" });
}, []);
return (
<div className="App">
<p>{user.name}</p>
<p>{user.password}</p>
<Test user={user} setUser={setUser} />
</div>
);
}
【问题讨论】:
-
@Ramesh,为什么?我在我的子组件中使用了
setUser({ ...user, name: u, password: p });。这会更新父状态吗? -
是的,应该。您所拥有的是一个逻辑错误,请参阅我的答案。
-
它工作正常
标签: reactjs