Calling start() on useEffect does not register/use all steps, only the first one
Opened this issue · 5 comments
Current Behavior
Calling start on useEffect does not register steps. After clicking "next" it moves to next walkthrouable item, but in the current step always displays the first step content.
However, totalSteps
displays correct number of steps.
import { useCopilot } from 'react-native-copilot';
const { start } = useCopilot();
useEffect(() => {
start()
},[])
[.. in the return function as in /example folder]
Expected behavior/code
Steps are registered and "next" press works correctly.
Environment
- Device: [iPhone 15 Pro Max Simulator]
- OS: [17.4]
react-native-copilot
: [3.3.2]react-native
: [71.14]react-native-svg
: [14.0.0]
Possible Solution
I was able to solve this by adding timeout of 3s in the useEffect.
setTimeout(() => { start() }, 3000
Additional context/Screenshots
I don't know why it happens, any idea how we can fix it?
setTimeout doesn't work for me. I am trying to set false if displayed already.
in my case, it even doesn't trigger. I have to trigger manually by touch event after a second
It seems sometimes useEffect init before all children-in-order finish, did causing problem
this is my fix:
useEffect(() => {
// Create a debounced version of the start function
const debouncedStart = debounce(() => {
start();
}, 1000);
// Call the debounced start function
debouncedStart();
// Clean up the debounced function
return () => {
debouncedStart.cancel();
};
}, [totalStepsNumber]);
depends on "totalStepsNumber" is the key
what is the totalStepsNumber here.give full code
Try my solution:
onLayout={() => { start(); }}
I am noticing the same issue. It seems like this library isn't maintained much anymore though :(