Javascript 无法使用useState挂钩设置值?为什么会发生这种情况? const[userDetail,setUserDetail]=useState([]) useffect(()=>{ getUsersData() }, []) const getUsersData=async()=>{ const userResp=wait MyService.getInstance().getEntities() 让数据=[] console.log(userResp) if(userResp){ 用户响应映射((d)=>{ 数据推送({ 姓名:d.name, 用户名:d.username }) }) setUserDetail(数据)/
setUserDetail即使在控制台上也不会设置userDetail数组的值。日志(userDetail)显示空数组。 像这样: 有两件事:Javascript 无法使用useState挂钩设置值?为什么会发生这种情况? const[userDetail,setUserDetail]=useState([]) useffect(()=>{ getUsersData() }, []) const getUsersData=async()=>{ const userResp=wait MyService.getInstance().getEntities() 让数据=[] console.log(userResp) if(userResp){ 用户响应映射((d)=>{ 数据推送({ 姓名:d.name, 用户名:d.username }) }) setUserDetail(数据)/,javascript,reactjs,react-hooks,Javascript,Reactjs,React Hooks,setUserDetail即使在控制台上也不会设置userDetail数组的值。日志(userDetail)显示空数组。 像这样: 有两件事: 您正在使用.map方法作为.forEach。.map方法的目的是返回一个新的数组。然后,不需要此数据数组。如果要转换数组,可以使用映射,但不需要创建新数组。Map将返回转换后的新数组 尝试将console.log移到方法getUsersData之外。然后,您将在每次渲染后看到userDetail的所有值 setUserDetail并不意味着对userDe
setUserDetail
并不意味着对userDetail
进行任何分配,直到下次调用useState
console.log(userDetail)
在这之前。在调用setState()
之后立即读取state
是一个潜在的陷阱。@jornsharpe好的,那么我应该如何摆脱它,因为我每次都犯了这个错误?只有console.log(userDetail)
在useState
之后,当它有了新的值时。
const [userDetail, setUserDetail] = useState([])
useEffect(() => {
getUsersData()
}, [])
const getUsersData = async () => {
const userResp = await MyService.getInstance().getEntities()
let data = []
console.log(userResp)
if (userResp) {
userResp.map((d) => {
data.push({
name: d.name,
username: d.username
})
})
setUserDetail(data) // < --------this line--------
console.log(data)
}
console.log(userDetail)
}
const[ userDetail , setUserDetail ] = useState([])
useEffect( () => {
getUsersData()
}, [])
const getUsersData = async() =>{
const userResp = await MyService.getInstance().getEntities()
console.log(userResp)
if(userResp){
setUserDetail(
userResp.map((d) => (
{
name:d.name,
username:d.username
})
))
}
}
console.log(userDetail)