如何映射已在 useEffect 钩子中设置的 prop 数组

明天约翰逊

我试图映射一个来自另一个组件的 props 形式的数组,但我无法获取数据。我似乎做对了一切,但我在屏幕上看不到任何东西。

 const [products, setProducts] = useState([])
  const [featuredProduct, setFeaturedProduct] = useState([]);

  
  useEffect(() => {
    return ()=>{
    const responseProductData = async()=>{
      const result =  await axios.get('/products.json')
      const data = result.data;
      setProducts(data)
      setFeaturedProduct(products.filter(product=>product.featured===true))
    }
   responseProductData()};
  }, [products]);

  
  return (
    <>
     <Header/>
     <Featured featured={featuredProduct}/>
     <Product/>
    </>
  )

我将特色设置为特色组件的特色产品,然后在组件本身中调用 props.featured 并尝试将其映射出来但什么也没带来。在控制台中,我可以看到数组,但它一直在重新渲染。我觉得这可能是原因。

仍在努力习惯 React。

扎卡里·哈伯

您遇到的问题是您products在效果的依赖项数组中。这意味着每次products状态改变时,效果都会重新运行。这又发生products变化因此,您的组件处于渲染循环中。

您可以data直接使用而不是products在效果中使用,因此您可以删除依赖项,这将修复循环。

 const [products, setProducts] = useState([])
  const [featuredProduct, setFeaturedProduct] = useState([]);

  
  useEffect(() => {
    const responseProductData = async()=>{
      const result =  await axios.get('/products.json')
      const data = result.data;
      setProducts(data)
      setFeaturedProduct(data.filter(product=>product.featured===true))
    }
   responseProductData()};
  }, []);

  
  return (
    <>
     <Header/>
     <Featured featured={featuredProduct}/>
     <Product/>
    </>
  )

或者,如果您不需要它作为完整的有状态值,您可以从productswith 中找出特色产品useMemo

 const [products, setProducts] = useState([])
  const featuredProduct = useMemo(()=>products.filter(product=>product.featured===true),[products])
  
  useEffect(() => {
    const responseProductData = async()=>{
      const result =  await axios.get('/products.json')
      setProducts(result.data)
    }
   responseProductData()};
  }, []);

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何更新 useEffect 钩子中异步函数内的数组?

如何在UseEffect中映射数组内的数组

在 React useEffect 钩子中设置钩子状态

我如何通过React访问useEffect钩子内置的数组?

如何在 Reactjs 中设置多个 useEffect 钩子以防止重复查询

在React的useEffect依赖数组中设置状态

如何使用 useEffect 将 API 数据设置为数组

使用 React 钩子更正 useEffect 的依赖数组

如何从对象数组中捕获组件中 useEffect 的正确返回?

如何避免 React 钩子中 useEffect 中的 setState?

如何使用 React 和 useEffect 更改数组中的位置?

如何在useEffect React JS中添加到数组

如何提前退出useEffect钩子?

我如何在 useEffect 钩子中写入我的 firebase?

如何捕获在我的 useEffect 钩子中抛出的错误?

如何使用React钩子清理useEffect中的setInterval

如何在 useEffect 钩子中停止无限循环

使用 props 值删除 useEffect 钩子中状态数组元素中的元素

如何在不使用实际的 useEffect 钩子的情况下创建像 React 的 useEffect 钩子中那样的陈旧闭包?

无效的钩子调用。当我在 useEffect 中调用 useQuery 时,只能在函数组件的主体内部调用钩子

无法在React中使用useEffect钩子将json服务器数据连接到数组中

为什么useEffect钩子不触发依赖项数组中的对象?

使用 React 中的 useEffect 和 useState 钩子从 get 请求管理数组

在播放列表中反应改变歌曲,useEffect 钩子依赖数组

当数组中只有一个元素发生变化时触发 useEffect 钩子

如何改变基于Vue“prop”计算的数组?

数组prop在构造函数中为空

使用反应钩子在对象数组中设置数组

在 react.js 中使用 useEffect 钩子。useEffect 依赖数组部分的问题