React 复合组件模式のフロントエンド開発における活用が広まっています。本記事では実際のプロジェクトをベースに、コア原理とベストプラクティスを掘り下げます。
基本的な使い方
实际项目中的用法会更复杂一些:
javascript
import { useRef, useEffect, useState } from 'react'
function useIntersectionObserver(options = {}) {
const [isVisible, setIsVisible] = useState(false)
const ref = useRef(null)
useEffect(() => {
const observer = new IntersectionObserver(([entry]) => {
setIsVisible(entry.isIntersecting)
}, { threshold: 0.1, ...options })
const el = ref.current
if (el) observer.observe(el)
return () => { if (el) observer.unobserve(el) }
}, [])
return [ref, isVisible]
}
このアプローチにより、コードのテスト可能性とスケーラビリティが向上します。
高度な使い方
完全な例を以下に示します:
javascript
import { useRef, useEffect, useState } from 'react'
function useIntersectionObserver(options = {}) {
const [isVisible, setIsVisible] = useState(false)
const ref = useRef(null)
useEffect(() => {
const observer = new IntersectionObserver(([entry]) => {
setIsVisible(entry.isIntersecting)
}, { threshold: 0.1, ...options })
const el = ref.current
if (el) observer.observe(el)
return () => { if (el) observer.unobserve(el) }
}, [])
return [ref, isVisible]
}
境界条件の処理に注意してください。これは本番環境で非常に重要です。
実践事例
コアロジックを理解することが重要です:
javascript
import { useRef, useEffect, useState } from 'react'
function useIntersectionObserver(options = {}) {
const [isVisible, setIsVisible] = useState(false)
const ref = useRef(null)
useEffect(() => {
const observer = new IntersectionObserver(([entry]) => {
setIsVisible(entry.isIntersecting)
}, { threshold: 0.1, ...options })
const el = ref.current
if (el) observer.observe(el)
return () => { if (el) observer.unobserve(el) }
}, [])
return [ref, isVisible]
}
パフォーマンスの最適化は具体的なシナリオに合わせる必要があり、すべてのケースで過度な最適化が必要というわけではありません。
パフォーマンス最適化
以下の方法で改善できます:
javascript
import { useRef, useEffect, useState } from 'react'
function useIntersectionObserver(options = {}) {
const [isVisible, setIsVisible] = useState(false)
const ref = useRef(null)
useEffect(() => {
const observer = new IntersectionObserver(([entry]) => {
setIsVisible(entry.isIntersecting)
}, { threshold: 0.1, ...options })
const el = ref.current
if (el) observer.observe(el)
return () => { if (el) observer.unobserve(el) }
}, [])
return [ref, isVisible]
}
このアプローチは半年以上にわたって本番環境で安定稼働しており、実際に検証済みです。
まとめ
- コードサンプルは参考用のみであり、ビジネスシナリオに応じて調整が必要です
- React 复合组件模式不是银弹,需要根据项目规模和技术栈选择
- 基礎的な原理を理解することは、APIを暗記することより重要です
- 本番環境で使用する前に必ず互換性を確認してください
- チームコラボレーションでは、規約とドキュメントが技術そのものより重要です