繁体   English   中英

Next.js 来自 GetServerSideProps 道具的实时价格更新

[英]Next.js live price updates from GetServerSideProps props

我正在尝试从 CoinGecko 获取比特币的实时价格。 我在 index.js 中有异步 GetServerSideProps 可以按预期工作,并且我将返回道具传递给<Home />进一步传递给<Main />组件,最后传递给<Calculatorbuy />组件。 一切正常,但我一开始只得到一次价格。 获取实时价格更新的最佳方式是什么? 我试图将道具放在<CalculatorBuy />内的 setInterval 中,但它只会一次又一次地传递相同的值。 我的文件:

index.js

export default function Home(props) {

  const {data} = props.result;

  return (
    <div className="container">
      <Head>
        <title>Kup BTC</title>
        <meta name="viewport" content="width=device-width, initial-scale=1.0"></meta>
      </Head>
      <Header />

      <Main data={data}/>

      <Footer />
    </div>
  )
}

export async function getServerSideProps(context) {
  const result = await coinGeckoClient.simple.price({
      ids: "bitcoin",
      vs_currencies: "pln",
  });
  return {
      props: {
          result
      },
  }
}
main.js

export default function Main(props) {
    const data = props.data;
    
    return (
        <main className="main">
                <div style={{ display: showMe?"block":"none" }}>
                    <Calculatorbuy data = {data} />
                </div>
        </main>
        )
}

calculatorbuy.js

export default function Calculatorbuy(props) {
    const data = props.data;
    const [value, setValue] = useState(0);
    const currentPrice = parseFloat(data.["bitcoin"].pln);
    console.log(currentPrice);
}

我想每 x 秒更新一次calculatorbuy 中的价格

getServerSideProps将使 Next.js 使用getServerSideProps返回的数据在每个请求的服务器端生成您的页面。 每个请求您只会在服务器上获取一次价格。

如果您需要实时更新价格,您可以在coinGeckoClient中使用setInterval在间隔内使用useEffect

这是您在客户端获取价格的方法,但您可以添加间隔 function 以轻松包装以下内容。

  const [price, setPrice] = useState();
  useEffect(() => {
    const fetchPrice = async () => {
      const result = await coinGeckoClient.simple.price({
        ids: "bitcoin",
        vs_currencies: "pln",
      });
      setPrice(result);
    };
    fetchPrice();
  })```  

暂无
暂无

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

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