简体   繁体   English

在 React 中解构数据

[英]Destructuring the data in React

So the thing I am trying to do is to destructure coinsData, so I can use the id globally and keep the coinsData so I can iterate it somewhere else.所以我想做的是解构coinsData,这样我就可以全局使用id并保留coinsData,这样我就可以在其他地方迭代它。 Right now I am having a problem with typescript on export CoinProvider Type '({ children }: { children?: ReactNode; }) => void' is not assignable to type 'FC<{}>' Help would be appreciated现在我在导出 CoinProvider Type '({ children }: { children?: ReactNode; }) => void' is not assignable to type 'FC<{}>'帮助将不胜感激

import React,{FC, useState, useEffect} from 'react'

export interface Coin  {
    id:string;
    name: string;
    current_price: number;
    symbol:string;
    price_change_percentage_24h:number
    image:string;
    market_cap:number
    market_cap_rank:number
    }
 export const CoinContext = React.createContext<Coin[] | undefined>(undefined)

 export const CoinProvider:FC= ({children}) => {
    const [loading, setLoading] =useState(false)
    const [page, setPage] = useState(1);
    const [totalPages, setTotalPages] = useState(10);
    const [coinsData, setCoinsData] = useState<Coin[]>([])
  
    const handlePrevPage = () => {
      setPage((prevPage) => prevPage - 1);
    };
  
    const handleNextPage = () => {
      setPage((nextPage) => nextPage + 1);
    };
          
        useEffect(()=>{
         const fetchData= async()=>{
         setLoading(true);
         const response= await fetch(`https://api.coingecko.com/api/v3/coins/markets? 
         vs_currency=usd&order=market_cap_desc&page=${page}&per_page=10&sparkline=false`)
         const result = await response.json()
            setCoinsData(result); 
            setTotalPages(totalPages);
            setLoading(false)
     
        }
            fetchData()
        },[page, totalPages])
  
      
    
      const Coins = coinsData.map((item) => {
        const {
        id, 
        } = item
    return(
    <CoinContext.Provider value={{Coins, totalPages, id, loading, handlePrevPage, handleNextPage, 
      currentPage:{ page }}}>
        {children}
    </CoinContext.Provider>
    )
}

You forgot about }) in line 47. And logic there should look like this:你忘了})在第 47 行。那里的逻辑应该是这样的:

const Coins = coinsData.map((item) => item.id)

Your component is missing a return statement.您的组件缺少return声明。

Make sure to return an HTML that can be rendered.确保返回可以渲染的 HTML。


return <>
    {coinsData.map((item) => {
        const { id } = item
        return (
            <CoinContext.Provider value={[{ id: 'id', current_price: 1, image: 'image', market_cap: 0, market_cap_rank: 0, name: 'name', price_change_percentage_24h: 0, symbol: 'symbol' }]}>
                {children}
            </CoinContext.Provider>
        )
    })
    }
</>

And, don't forget to close the map function with the parenthesis )并且,不要忘记用括号关闭map function )

In case, you only want to pass coinsData以防万一,您只想传递 coinData

    return <CoinContext.Provider value={...coinsData}>
        {children}
    </CoinContext.Provider>

you can renounce the map and simplify your code with destructuring your coinsData directly.您可以放弃map并通过直接解构您的coinsData来简化您的代码。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM