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 无法使用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数组的值。日志(userDetail)显示空数组。 像这样:

有两件事:

  • 您正在使用.map方法作为.forEach。.map方法的目的是返回一个新的数组。然后,不需要此数据数组。如果要转换数组,可以使用映射,但不需要创建新数组。Map将返回转换后的新数组
  • 尝试将console.log移到方法getUsersData之外。然后,您将在每次渲染后看到userDetail的所有值

  • 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)