首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Use effect多次调用

Use effect多次调用
EN

Stack Overflow用户
提问于 2021-07-22 23:59:01
回答 2查看 85关注 0票数 0

在挂载组件时,我使用useEffect来更改状态变量。我正在使用redux进行状态管理。我面临的问题是使用效果被多次调用。

代码语言:javascript
复制
React.useEffect(() => {
    
    dispatch(getSingleCoin(id))

    setName(coinDetail?.name)
    setSymbol(coinDetail?.symbol)
    setLogourl(coinDetail?.logo)
    setPrice(coinDetail?.price)
    setLaunchDate(coinDetail?.launchDate)
    setWebsiteUrl(coinDetail?.websiteUrl)
    setNetwork(coinDetail?.chain)
    setAddress(coinDetail?.address)
    setTwitterUrl(coinDetail?.twitter)
    setTelegramUrl(coinDetail?.telegram)
    setRedditUrl(coinDetail?.reddit)
    setYoutubeUrl(coinDetail?.youtube)
    setCoinDescription(coinDetail?.description)
    setMarketCap(coinDetail?.marketCap)
  }, [coinDetail,dispatch, id, approveSuccess, disapproveSuccess])

我的改变状态变量的useEffect钩子。

代码语言:javascript
复制
export const coinDetailReducer = (state = { loading: true }, action) => {
  switch (action.type) {
    case COIN_DETAIL_REQUEST:
      return { loading: true }
    case COIN_DETAIL_SUCCESS:
      return { loading: false, coinDetail: action.payload.coin }
    case COIN_DETAIL_FAIL:
      return { loading: false, error: action.payload }
    case COIN_DETAIL_RESET:
      return {}
    default:
      return state
  }
}

我的reducer处理分派的操作。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-07-23 00:12:55

在同一个useEffect上操作dispatch和处理其响应将导致无限的呈现循环。而是使用两个不同useEffect,一个用于分派,另一个基于响应发送到setState。

代码语言:javascript
复制
useEffect(() => {
    dispatch(getSingleCoin(id));
  }, [dispatch, id]);

useEffect(() => {
    setName(coinDetail?.name);
    setSymbol(coinDetail?.symbol);
    setLogourl(coinDetail?.logo);
    setPrice(coinDetail?.price);
    setLaunchDate(coinDetail?.launchDate);
    setWebsiteUrl(coinDetail?.websiteUrl);
    setNetwork(coinDetail?.chain);
    setAddress(coinDetail?.address);
    setTwitterUrl(coinDetail?.twitter);
    setTelegramUrl(coinDetail?.telegram);
    setRedditUrl(coinDetail?.reddit);
    setYoutubeUrl(coinDetail?.youtube);
    setCoinDescription(coinDetail?.description);
    setMarketCap(coinDetail?.marketCap);
  }, [coinDetail]);
票数 0
EN

Stack Overflow用户

发布于 2021-07-23 00:02:00

每当他的一个依赖项发生变化时,useEffect就会运行。因此,每次[coinDetail,dispatch, id, approveSuccess, disapproveSuccess]发生变化时,它都会再次运行。

也许在useEffect's doc上看一下可能会有所帮助。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68488011

复制
相关文章

相似问题

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