我做了一个自定义钩子作为我的交叉点观察者,但我同时两次获得虚假和真实状态!,第一次是错误的(两次),第二次是正确的(两次)为什么会发生这种情况?为什么状态会改变自己?state 必须为真,因为 h3 是 100% 可见的。
这是代码:
应用程序.js
import React from "react";
import "./App.css";
import useIntersectionObserver from "./hooks/useIntersectionObserver";
function App() {
const headingRef = React.useRef(null);
const { observer, state } = useIntersectionObserver({ rootMargin: "10px" });
React.useEffect(() => {
if (headingRef.current instanceof Element) {
observer.observe(headingRef.current);
}
}, []);
console.log(state);
return (
<>
<h3 ref={headingRef}>test page</h3>
<h2>test page</h2>
</>
);
}
export default App;
使用IntersectionObserver 自定义钩子:
import React from "react";
const useIntersectionObserver = (options) => {
const [state, setState] = React.useState(false);
const callback = (entries) => {
entries.forEach((entry) => {
if (entry.isIntersecting) {
setState(true);
} else {
setState(false);
}
});
};
const observer = new IntersectionObserver(callback, options);
return { observer, state };
};
export default useIntersectionObserver;