Я играю с React Hooks более нескольких часов, возможно, я столкнулся с интригующей проблемой: использование setInterval просто не работает, как я ожидал, с response-native
function Counter() {
const [time, setTime] = useState(0);
const r = useRef(null);
r.current = { time, setTime };
useEffect(() => {
const id = setInterval(() => {
console.log("called");
r.current.setTime(r.current.time + 1);
}, 1000);
return () => {
console.log("cleared");
clearInterval(id);
};
}, [time]);
return <Text>{time}</Text>;
}
Приведенный выше код должен очищатьInterval при каждом изменении состояния time
. Отлично работает на ReactJS
, но на React-native
Я получаю сообщение об ошибке: "Callback() it's not a function"
введите описание изображения здесь
В Reactjs он работает, как и ожидалось
https://codesandbox.io/s/z69z66kjyx
"dependencies": {
"react": "16.8.3",
"react-native": "^0.59.6",
...}
Обновление: я пытался использовать ссылку, как в этом примере, но все еще получаюта же ошибка
const [time, setTime] = useState(0);
useInterval(() => {
setTime(time +1);
});
return (<Text>{time}</Text>);
}
function useInterval(callback) {
const savedCallback = useRef();
// Remember the latest function.
useEffect(() => {
savedCallback.current = callback;
}, [callback]);
// Set up the interval.
useEffect(() => {
let id = setInterval(()=>savedCallback.current(), delay);
return () => clearInterval(id);
});
}