反应状态在函数内部未定义
react state is undefined inside the function
我有一个简单的注册表单。提交表单时,在 handleSubmit 函数中,我无权访问任何状态。我在这里做错了什么?
const Signup = () =>{
const [email, setEmail] = useState('');
const [password, setPassword] = useState('');
const [username, setUsername] = useState('');
const handleSubmit = (e) => {
e.preventDefault()
console.log(email) #undefined
}
}
编辑:
import React from "react";
import {useState, useEffect} from 'react';
const Signup = () =>{
const [email, setEmail] = useState('');
const [password, setPassword] = useState('');
const [username, setUsername] = useState('');
const handleSubmit = (e) => {
e.preventDefault()
debugger
# email passord username are not available here
console.log({email})
}
return (
<form onSubmit={handleSubmit}>
<input type="text"
className="form-control"
placeholder="Enter Username"
value={username}
onChange={(e) => setUsername(e.target.value)}/>
<input type="email"
className="form-control"
placeholder="Enter email"
value={email}
onChange={(e) => setEmail(e.target.value)} />
</form>
)
}
export default Signup;
如果它 console.log({email})
它会 return 值。我怎样才能得到所有的状态值。我必须做这样的事情吗const handleSubmit = (e, {email username password})
在 React 中,要显示变量(例如状态变量),您应该将变量放在 {}
.
例如试试这个:
const Signup = () =>{
const [email, setEmail] = useState('');
const [password, setPassword] = useState('');
const [username, setUsername] = useState('');
const handleSubmit = (e) => {
e.preventDefault()
console.log({email} + "-" + {username} + "-" + {password})
}
}
另一个例子:
const [value, setValue] = useState('');
.
.
<input type="text" value={value} />
让所有状态都在同一个对象而不是多个状态总是一个更好的主意。这是更简洁的方法,它也解决了这个问题,因为所有东西都将被同一个状态对象跟踪,所以重构也更容易。
import React from "react";
import { useState, useEffect } from "react";
const App = () => {
const [formData, setFormData] = useState({
email: "",
username: ""
});
const handleChange = (key, value) => {
setFormData({
...formData,
[key]: value
});
};
const handleSubmit = (e) => {
e.preventDefault();
console.log(formData);
};
return (
<form onSubmit={handleSubmit}>
<input
type="text"
className="form-control"
placeholder="Enter Username"
value={formData.username}
onChange={(e) => handleChange("username", e.target.value)}
/>
<input
type="email"
className="form-control"
placeholder="Enter email"
value={formData.email}
onChange={(e) => handleChange("email", e.target.value)}
/>
<button type="submit">submit</button>
</form>
);
};
export default App;
Link 到 Codesandbox:https://codesandbox.io/s/serene-bogdan-s8stm9?file=/src/App.js:0-924
我有一个简单的注册表单。提交表单时,在 handleSubmit 函数中,我无权访问任何状态。我在这里做错了什么?
const Signup = () =>{
const [email, setEmail] = useState('');
const [password, setPassword] = useState('');
const [username, setUsername] = useState('');
const handleSubmit = (e) => {
e.preventDefault()
console.log(email) #undefined
}
}
编辑:
import React from "react";
import {useState, useEffect} from 'react';
const Signup = () =>{
const [email, setEmail] = useState('');
const [password, setPassword] = useState('');
const [username, setUsername] = useState('');
const handleSubmit = (e) => {
e.preventDefault()
debugger
# email passord username are not available here
console.log({email})
}
return (
<form onSubmit={handleSubmit}>
<input type="text"
className="form-control"
placeholder="Enter Username"
value={username}
onChange={(e) => setUsername(e.target.value)}/>
<input type="email"
className="form-control"
placeholder="Enter email"
value={email}
onChange={(e) => setEmail(e.target.value)} />
</form>
)
}
export default Signup;
如果它 console.log({email})
它会 return 值。我怎样才能得到所有的状态值。我必须做这样的事情吗const handleSubmit = (e, {email username password})
在 React 中,要显示变量(例如状态变量),您应该将变量放在 {}
.
例如试试这个:
const Signup = () =>{
const [email, setEmail] = useState('');
const [password, setPassword] = useState('');
const [username, setUsername] = useState('');
const handleSubmit = (e) => {
e.preventDefault()
console.log({email} + "-" + {username} + "-" + {password})
}
}
另一个例子:
const [value, setValue] = useState('');
.
.
<input type="text" value={value} />
让所有状态都在同一个对象而不是多个状态总是一个更好的主意。这是更简洁的方法,它也解决了这个问题,因为所有东西都将被同一个状态对象跟踪,所以重构也更容易。
import React from "react";
import { useState, useEffect } from "react";
const App = () => {
const [formData, setFormData] = useState({
email: "",
username: ""
});
const handleChange = (key, value) => {
setFormData({
...formData,
[key]: value
});
};
const handleSubmit = (e) => {
e.preventDefault();
console.log(formData);
};
return (
<form onSubmit={handleSubmit}>
<input
type="text"
className="form-control"
placeholder="Enter Username"
value={formData.username}
onChange={(e) => handleChange("username", e.target.value)}
/>
<input
type="email"
className="form-control"
placeholder="Enter email"
value={formData.email}
onChange={(e) => handleChange("email", e.target.value)}
/>
<button type="submit">submit</button>
</form>
);
};
export default App;
Link 到 Codesandbox:https://codesandbox.io/s/serene-bogdan-s8stm9?file=/src/App.js:0-924