我试图在一个带有modal的页面上运行React Joyride。modal在stepIndex 3打开,第4步应该在modal内部,但我得到一个警告Target not mounted
,它跳到第5步。
我尝试在回调函数中添加一个setTimeout
,但它不起作用。
const handleJoyrideCallback = (data: any) => {
const { action, index, status, type } = data;
const nextStepIndex = index + (action === ACTIONS.PREV ? -1 : 1);
if ([EVENTS.STEP_AFTER, EVENTS.TARGET_NOT_FOUND].includes(type)) {
setState({ run: false, loading: true });
setTimeout(() => {
setState({
loading: false,
run: true,
stepIndex: index + (action === ACTIONS.PREV ? -1 : 1),
});
}, 2000);
} else if ([STATUS.FINISHED, STATUS.SKIPPED].includes(status)) {
setState({ run: false });
setJoyride(false);
} else if (type === EVENTS.TOOLTIP_CLOSE) {
setState({ stepIndex: index + 1 });
}
if ([ACTIONS.NEXT] && index === 3) {
openModal(true);
}
};
1条答案
按热度按时间rn0zuynd1#
你可以使用useEffect。它会观察模式是否打开,然后在模式中显示步骤。
1.将modalOpen添加到状态以跟踪模态是否打开。
1.使用useEffect观察modalOpen中的更改。
1.当模态打开时,更新步骤索引以显示模态内的步骤。
1.更新回调函数以打开模态,并在到达正确的步骤(stepIndex3)时设置modalOpen。
现在,当模态打开时,Joyride应该只显示模态内的步骤,修复警告并按预期显示步骤。
以下是细分:
首先,在state中添加一个modalOpen属性:
添加useEffect以等待'modalOpen':
最后更新handleJoyrideCallback函数,使其在到达stepIndex 3时设置modalOpen: