首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么useEffect()钩子要重新渲染10次以上?

为什么useEffect()钩子要重新渲染10次以上?
EN

Stack Overflow用户
提问于 2020-07-16 21:29:47
回答 1查看 99关注 0票数 0

看起来我的"EnterPin“函数一直在重新渲染。当Authentication为true时,我只需要重新呈现它一次。

然后,当它变为/chat时,它应该调用两个函数。当前的问题是,它调用该函数的次数超过10次。我猜问题可能是useeffect函数触发太频繁了?你认为如何?

所以想要的结果是,当引脚正确时,它会变成"/chat“。您可以在这里看到useeffect函数:

代码语言:javascript
复制
useEffect(() => {
    if (isAuthenticated === true) {
      props.history.push("/chat");
    }
  }, [props.history, isAuthenticated]);

isAuthenticated变量来自react上下文,并由以下缩减程序更改:

代码语言:javascript
复制
import { CHATID_FETCH_SUCCESSFUL, NEW_CURRENT_NODE_CREATED } from "./authTypes";

export default (state, action) => {
  switch (action.type) {
    case CHATID_FETCH_SUCCESSFUL:
      return {
        isAuthenticated: true,
        chatId: action.payload,
      };
    // action 5: new current Node created
    case NEW_CURRENT_NODE_CREATED:
      return {
        ...state,
        currentNode: [...action.payload],
      };
    default:
      return state;
  }
};

每当它转向"/chat“端时,它都应该调用以下两个函数,这两个函数目前被调用了10次,但应该只调用一次:

代码语言:javascript
复制
let startEvent = fetchEventAnswerFromDialogflow(
        someParameters
      );
let frageEvent = fetchEventAnswerFromDialogflow(
        someParameters
      );
EN

回答 1

Stack Overflow用户

发布于 2020-07-16 21:36:43

再见,这个问题与useEffect的部门有关。您不需要添加props.history依赖。如果你添加它,每次props.history改变他的值时,useEffect都会被调用(这就是为什么你得到了这么多重新渲染的原因)。所以你的代码变成了:

代码语言:javascript
复制
useEffect(() => {
if (isAuthenticated === true && props.history.location.pathname !== "/chat") {
  props.history.push("/chat");
}
}, [isAuthenticated]);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62935885

复制
相关文章

相似问题

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