웹 애플리케이션을 구축할 때 URL을 공유할 때 소셜 미디어 플랫폼에서 링크 미리 보기를 표시하는 방식과 같이 링크 콘텐츠의 미리 보기를 표시하는 것이 유용한 경우가 많습니다. 따라서 URL 텍스트 대신 URL 옆에 사진 및 설명과 같은 정보도 표시할 수 있습니다.
이 게시물에서는 대상 페이지의 HTML을 스크랩하기 위해 axios 및 Cherio를 사용하여 Open Graph 메타데이터(제목, 이미지, 설명 등)를 가져오는 동안 React 앱에 링크를 삽입하는 방법을 안내하겠습니다.
제공된 모든 URL에 대한 오픈 그래프 메타데이터를 가져와 표시하는 간단한 EmbeddedLink 구성 요소를 만들어 보겠습니다.
시작하기 전에 다음이 설치되어 있는지 확인하세요.
다음 명령을 사용하여 Axios와 Cheerio를 설치할 수 있습니다.
npm install axios cheerio
URL을 소품으로 사용하고 나중에 사용할 해당 링크에서 Open Graph 메타데이터를 가져오는 새로운 EmbeddedLink 구성 요소를 만듭니다. 전체 코드는 다음과 같습니다.
import React, { useState, useEffect } from 'react'; import axios from 'axios'; import cheerio from 'cheerio'; const EmbeddedLink = ({ url }) => { const [loading, setLoading] = useState(true); const [error, setError] = useState(null); const [imageUrl, setImageUrl] = useState(''); const [title, setTitle] = useState(''); const [description, setDescription] = useState(''); useEffect(() => { const fetchOGData = async () => { try { const response = await axios.get(url, { headers: { 'origin': 'https://mysite.com' } }); const html = response.data; // Parse HTML content using Cheerio const $ = cheerio.load(html); const ogImage = $('meta[property="og:image"]').attr('content'); const ogTitle = $('meta[property="og:title"]').attr('content'); const ogDesc = $('meta[property="og:description"]').attr('content'); setImageUrl(ogImage || ''); setTitle(ogTitle || ''); setDescription(ogDesc || ''); setLoading(false); } catch (error) { setError(error); setLoading(false); } }; fetchOGData(); }, [url]); if (loading) returnLoading...; if (error) returnError: {error.message}; return ( ); }; export default EmbeddedLink;
이제 다음과 같이 React 앱에서 EmbeddedLink 구성 요소를 사용할 수 있습니다.
import React from 'react'; import EmbeddedLink from './EmbeddedLink'; function App() { return (); } export default App;Link Preview Example
이미지, 제목, 설명과 함께 제공된 URL의 미리보기가 렌더링됩니다.
사용자에게 적절한 메시지를 표시하여 잠재적인 오류와 로드 상태를 처리합니다.
완료되면 아래 그림과 같은 결과를 볼 수 있습니다.
저는 이 개발자가 포함된 링크 스타일을 선호하지만 원하는대로 스타일을 지정할 수 있습니다.
부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.
Copyright© 2022 湘ICP备2022001581号-3