UseInView
import { useEffect, useState } from 'react';
import Taro from '@tarojs/taro';
const useIsInView = (selector, options = { initialRatio: 1, thresholds: [0, 1], observeAll: true }): [React.SetStateAction<boolean>] => {
const [isInView, setIsInView] = useState(true);
const [intersectionRatio, setIntersectionRatio] = useState(0);
const [page, _] = useState<any>(Taro.getCurrentInstance().page);
const [random, __] = useState(Math.random());
useEffect(() => {
if (intersectionRatio > 0.5) {
setIsInView(true);
} else {
setIsInView(false);
}
}, [intersectionRatio])
useEffect(() => {
console.log('inView inner effect', selector, random);
const observer = Taro.createIntersectionObserver(page, options);
const vp = observer.relativeToViewport({ bottom: 200 })
vp.observe('.' + selector, (res) => {
console.log('inView inner change', res);
setIntersectionRatio(res.intersectionRatio);
});
return () => {
observer.disconnect();
};
}, [options]);
return [isInView];
};
export default useIsInView;
使用方法
定义 key及 hook
const key = "component_key";
// 定义
const [inView] = useInView(key);
创建 component
return <View id={key} key={key}></View>
监听变化
useEffect(() => {
console.log("Is In View Change", inView)
},[inView)
16 条评论
2025年10月新盘 做第一批吃螃蟹的人coinsrore.com
新车新盘 嘎嘎稳 嘎嘎靠谱coinsrore.com
新车首发,新的一年,只带想赚米的人coinsrore.com
新盘 上车集合 留下 我要发发 立马进裙coinsrore.com
做了几十年的项目 我总结了最好的一个盘(纯干货)coinsrore.com
新车上路,只带前10个人coinsrore.com
新盘首开 新盘首开 征召客户!!!coinsrore.com
新项目准备上线,寻找志同道合 的合作伙伴coinsrore.com
新车即将上线 真正的项目,期待你的参与coinsrore.com
新盘新项目,不再等待,现在就是最佳上车机会!coinsrore.com
新盘新盘 这个月刚上新盘 新车第一个吃螃蟹!coinsrore.com
1
1
1
1
1
1
1
1
文章结构紧凑,层次分明,逻辑严密,让人一读即懂。
?语言类评语?