React 状态更新只更新一个元素
React state update only updates one element
不确定是什么原因导致此问题,当我使用 useState 更改状态时,调用它的元素更新但另一个元素不更新(如下所示)。当我刷新页面时,正确的显示
<>
{
user.rank != "user" && user.username != username && userInfo.rank == "user" ? <div className="profile-btn" onClick={async () => {
let res = await PromoteToMod(username)
if(res.status == 'success')
setUserInfo(state => state.rank = 'mod')
}}>
<p>PROMOTE TO MOD</p>
</div>: <></>
}
{
user.rank != "user" && user.username != username && userInfo.rank == "mod" ? <div className="profile-btn" onClick={async () => {
let res = await DemoteToUser(username)
if(res.status == 'success')
setUserInfo(state => state.rank = 'user')
}}>
<p>DEMOTE TO USER</p>
</div>: < > < />
}
</>
这是来自 React Hook 的 return()。钩子只包含一个状态,[userInfo, setUserInfo]。 userInfo 是从服务器检索的,这就是刷新时显示正确部分的原因。但是我想在从服务器收到响应后更新这两个按钮 (PROMOTE/DEMOTE),因此调用 setUserInfo。
试试下面的方法,
{
user.rank != "user" && user.username != username && userInfo.rank == "user" ?
<div className="profile-btn" onClick={async () => {
let res = await PromoteToMod(username)
if(res.status == 'success')
setUserInfo(state => ({...state, rank:'mod'}));
}}>
<p>PROMOTE TO MOD</p>
</div>: <></>
}
类似地 rank: 'user'
setUserInfo(state => ({...state, rank:'user'}));
不确定是什么原因导致此问题,当我使用 useState 更改状态时,调用它的元素更新但另一个元素不更新(如下所示)。当我刷新页面时,正确的显示
<>
{
user.rank != "user" && user.username != username && userInfo.rank == "user" ? <div className="profile-btn" onClick={async () => {
let res = await PromoteToMod(username)
if(res.status == 'success')
setUserInfo(state => state.rank = 'mod')
}}>
<p>PROMOTE TO MOD</p>
</div>: <></>
}
{
user.rank != "user" && user.username != username && userInfo.rank == "mod" ? <div className="profile-btn" onClick={async () => {
let res = await DemoteToUser(username)
if(res.status == 'success')
setUserInfo(state => state.rank = 'user')
}}>
<p>DEMOTE TO USER</p>
</div>: < > < />
}
</>
这是来自 React Hook 的 return()。钩子只包含一个状态,[userInfo, setUserInfo]。 userInfo 是从服务器检索的,这就是刷新时显示正确部分的原因。但是我想在从服务器收到响应后更新这两个按钮 (PROMOTE/DEMOTE),因此调用 setUserInfo。
试试下面的方法,
{
user.rank != "user" && user.username != username && userInfo.rank == "user" ?
<div className="profile-btn" onClick={async () => {
let res = await PromoteToMod(username)
if(res.status == 'success')
setUserInfo(state => ({...state, rank:'mod'}));
}}>
<p>PROMOTE TO MOD</p>
</div>: <></>
}
类似地 rank: 'user'
setUserInfo(state => ({...state, rank:'user'}));