首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >未定义TypeError:无法读取未定义(读取‘过滤器’) JavaScript的属性

未定义TypeError:无法读取未定义(读取‘过滤器’) JavaScript的属性
EN

Stack Overflow用户
提问于 2022-07-13 11:49:57
回答 2查看 1.2K关注 0票数 0

我在JavaScript中有一个问题关注过滤器不能工作。我不确定可能是因为API使用了很长的时间来响应

我的代码:

代码语言:javascript
复制
const getDataAll  = () =>{
    const [machines, setMachines] = useState([])
    const getMc = async () =>{
       try {
         const resMc = await axios.get("My API")
         setMachines(resMc.data)
       } catch (err) {
         console.error(err.message)
       }

    useEffect(()=>{
       getMc()
    },[])
    
    const sumData = () =>{
       const filterName = machines.data.filter((el) => el.name == "v10turbo")
    }
}

筛选器会在一段时间内显示此警报。

我看到时间显示在浏览器中的API响应大约8-9秒以下的图片

我不确定我是否做对了。如果正确,请帮助我解决这个问题。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-07-13 11:55:08

代码本身是正确的。但是,当您的组件呈现时,还没有数据,useeffect会在rerender之后工作。您需要一个加载状态:

const getDataAll = () =>{ const [machines, setMachines] = useState([]); const [loading, setLoading] = useState(true); const getMc = async () =>{ try { const resMc = await axios.get("My API") setMachines(resMc.data) setLoading(false); } catch (err) { console.error(err.message) } finally { setLoading(false); } } useEffect(()=>{ getMc() },[]) const sumData = () =>{ const filterName = machines.data.filter((el) => item.name == "v10turbo") } } if(loading) { return<p>Loading...</p> }

这应该能解决问题。

票数 0
EN

Stack Overflow用户

发布于 2022-07-13 11:57:27

我不确定,但这会有帮助的

代码语言:javascript
复制
const sumData = useCallback(() =>{
   const filterName = machines.data?.filter((el) => item.name == "v10turbo")
}, [machines]);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72965785

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档