我将基于类的组件转换为功能组件,并认为我可以正确转换componentDidUpdate
方法,但是我的棉绒匠抱怨,所以我可以对自己犯的错误进行一些说明。
这是我在基于类的组件上的componentDidUpdate
函数:
componentDidUpdate(prevProps) {
if (
prevProps.hasUnlockBeenClicked !== this.props.hasUnlockBeenClicked &&
this.props.hasUnlockBeenClicked &&
!this.props.startAt
) {
this.saveInitialSession();
}
}
saveInitialSession = () => {
const { setSessionProperties, agentId, customerId, customerName } = this.props;
setSessionProperties({
agentId,
customerId,
customerName,
startAt: moment().format(),
});
}
这就是我试图将其更改为在功能组件上使用useEffect()
的原因:
const saveInitialSession = () => {
setSessionProperties({
agentId,
customerId,
customerName,
startAt: moment().format(),
});
};
useEffect(() => {
if (hasUnlockBeenClicked && !startAt) {
saveInitialSession();
}
}, [hasUnlockBeenClicked]);
Eslint告诉我,依赖项数组需要包含startAt
和saveInitialSession
,这对我来说没有任何意义。我只希望它在hasUnlockBeenClicked
被更改的情况下运行。