看起来我的"EnterPin“函数一直在重新渲染。当Authentication为true时,我只需要重新呈现它一次。
然后,当它变为/chat时,它应该调用两个函数。当前的问题是,它调用该函数的次数超过10次。我猜问题可能是useeffect函数触发太频繁了?你认为如何?
所以想要的结果是,当引脚正确时,它会变成"/chat“。您可以在这里看到useeffect函数:
useEffect(() => {
if (isAuthenticated === true) {
props.history.push("/chat");
}
}, [props.history, isAuthenticated]);isAuthenticated变量来自react上下文,并由以下缩减程序更改:
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次,但应该只调用一次:
let startEvent = fetchEventAnswerFromDialogflow(
someParameters
);
let frageEvent = fetchEventAnswerFromDialogflow(
someParameters
);发布于 2020-07-16 21:36:43
再见,这个问题与useEffect的部门有关。您不需要添加props.history依赖。如果你添加它,每次props.history改变他的值时,useEffect都会被调用(这就是为什么你得到了这么多重新渲染的原因)。所以你的代码变成了:
useEffect(() => {
if (isAuthenticated === true && props.history.location.pathname !== "/chat") {
props.history.push("/chat");
}
}, [isAuthenticated]);https://stackoverflow.com/questions/62935885
复制相似问题