【发布时间】:2022-01-19 23:40:50
【问题描述】:
我在 App.js 组件中有一个 api 调用,我从这里获取用户名以在导航栏中显示它。您可以看到导航栏组件将 name 属性作为参数传递给它。这就是我的 App.js 代码的样子
function App() {
const[name,setName] = useState(null);
useEffect(()=> {
(
async () => {
try{
const res = await fetch('https://localhost:44361/api/users/getuser', {
headers: {"Content-Type": 'application/json;charset=UTF-8'},
credentials: 'include',
});
const content = await res.json();
console.log(content);
setName(content[0].uFirstName); // has to be content[0]
}
catch(e){
console.log(e);
}
}
)();
},[name])
return (
<Router>
<div className="App">
<Navbar name = {name}/>
<Routes>
<Route exact path="/" element={ <Home />} />
<Route path="/registration" element = {<Registration/>} />
<Route path="/login" element = {<Login/>} />
</Routes>
</div>
</Router>
);
}
export default App;
现在我想更新 Login.js 组件的 name 属性。 Login.js 看起来像这样:
function Login() {
// const[name,setName] = useState(null);
const[UEmail,setEmail] = useState(null);
const[UPassword,setPassword] = useState(null);
const[navigate, setNavigate] = useState(false);
const submitHandler = async (e) =>
{
e.preventDefault(); // Prevent from being refreshed. Because User will not re-put every field if some field is wrong
try{
const res = await fetch('https://localhost:44361/api/users/login', {
method: 'POST',
headers: {"Content-Type": 'application/json;charset=UTF-8'},
credentials: 'include',
body : JSON.stringify({
UEmail,
UPassword
})
});
var content = await res.json();
if(res.status === 200)
{
setNavigate(true);
//DO something
}
else if(res.status === 400){
//DO something
}
}catch(err){
console.log(err);
}
}
if(navigate) // REDIRECT TO LOGIN PAGE AFTER BEING SUCCESSFULLY REGISTERED
{
return <Navigate to="/"/>
}
return (
<div className="fullContainer">
<div className="base-container">
<div className="reg">Login</div>
<div className="content">
<div className="form">
<div className="form-group">
<input name="Email" type="email" placeholder="Email" required
onChange={e => setEmail(e.target.value)}
/>
</div>
<div className="form-group">
<input name="Password" type="password" placeholder="Password" required
onChange={e => setPassword(e.target.value)}
/>
</div>
</div>
</div>
<div className="footer">
<button onClick={submitHandler} type="button" className="btn">Login</button>
</div>
<div className="toReg">
<p>Don't have an account?
<Link to="/registration">
<a> Register</a>
</Link>
</p>
</div>
</div>
</div>
)
}
export default Login
用户在输入所有凭据后单击登录按钮后如何更新 App.js 中的名称。我想这样做是因为,在状态代码为 200 时将用户导航到主页后,导航栏中的用户名没有改变。我需要重新加载才能在导航栏中看到正确的用户名。
谢谢。
【问题讨论】:
标签: javascript reactjs api react-navigation react-component