- ReactJS 教程
- ReactJS - 首頁
- ReactJS - 簡介
- ReactJS - 路線圖
- ReactJS - 安裝
- ReactJS - 特性
- ReactJS - 優點與缺點
- ReactJS - 架構
- ReactJS - 建立 React 應用
- ReactJS - JSX
- ReactJS - 元件
- ReactJS - 巢狀元件
- ReactJS - 使用新建立的元件
- ReactJS - 元件集合
- ReactJS - 樣式
- ReactJS - 屬性 (props)
- ReactJS - 使用屬性建立元件
- ReactJS - props 驗證
- ReactJS - 建構函式
- ReactJS - 元件生命週期
- ReactJS - 事件管理
- ReactJS - 建立一個事件感知元件
- ReactJS - 在 Expense Manager 應用中引入事件
- ReactJS - 狀態管理
- ReactJS - 狀態管理 API
- ReactJS - 無狀態元件
- ReactJS - 使用 React Hooks 進行狀態管理
- ReactJS - 使用 React Hooks 進行元件生命週期管理
- ReactJS - 佈局元件
- ReactJS - 分頁
- ReactJS - Material UI
- ReactJS - Http 客戶端程式設計
- ReactJS - 表單程式設計
- ReactJS - 受控元件
- ReactJS - 非受控元件
- ReactJS - Formik
- ReactJS - 條件渲染
- ReactJS - 列表
- ReactJS - Keys
- ReactJS - 路由
- ReactJS - Redux
- ReactJS - 動畫
- ReactJS - Bootstrap
- ReactJS - 地圖
- ReactJS - 表格
- ReactJS - 使用 Flux 管理狀態
- ReactJS - 測試
- ReactJS - CLI 命令
- ReactJS - 構建與部署
- ReactJS - 示例
- Hooks
- ReactJS - Hooks 簡介
- ReactJS - 使用 useState
- ReactJS - 使用 useEffect
- ReactJS - 使用 useContext
- ReactJS - 使用 useRef
- ReactJS - 使用 useReducer
- ReactJS - 使用 useCallback
- ReactJS - 使用 useMemo
- ReactJS - 自定義 Hooks
- ReactJS 高階
- ReactJS - 可訪問性
- ReactJS - 程式碼分割
- ReactJS - 上下文
- ReactJS - 錯誤邊界
- ReactJS - 轉發 Refs
- ReactJS - 碎片
- ReactJS - 高階元件
- ReactJS - 與其他庫整合
- ReactJS - 效能最佳化
- ReactJS - Profiler API
- ReactJS - 埠
- ReactJS - 無 ES6 ECMAScript 的 React
- ReactJS - 無 JSX 的 React
- ReactJS - 調和
- ReactJS - Refs 和 DOM
- ReactJS - 渲染 Props
- ReactJS - 靜態型別檢查
- ReactJS - 嚴格模式
- ReactJS - Web Components
- 其他概念
- ReactJS - 日期選擇器
- ReactJS - Helmet
- ReactJS - 內聯樣式
- ReactJS - PropTypes
- ReactJS - BrowserRouter
- ReactJS - DOM
- ReactJS - 走馬燈
- ReactJS - 圖示
- ReactJS - 表單元件
- ReactJS - 參考 API
- ReactJS 有用資源
- ReactJS - 快速指南
- ReactJS - 有用資源
- ReactJS - 討論
ReactJS - isDOMComponent()
ReactJS 就像一個面向 Web 開發人員的工具箱。它幫助他們透過將所有內容分解成稱為元件的小部分來構建網站。每個元件都有自己的時間表,React 提供了開發人員在構建這些部分的不同時間可以使用的一些工具。
這些內建方法之一是 isDOMComponent() 方法。它檢查給定的例項是否為 DOM 元件。因此,我們可以說,它可以幫助我們找到網頁的一部分是否是一個基本的 HTML 元素,例如 <div> 或 <span>。
語法
isDOMComponent(instance)
引數
instance − 這是我們要檢查是否為 DOM 元件的 React 元素的例項。它是我們要測試的元素。
返回值
isDOMComponent 函式返回 true 或 false 作為布林值。
true − 如果例項是 DOM 元件,例如 <div> 或 <span>。
false − 如果例項不是 DOM 元件或是一個自定義的 React 元件。
示例
示例 - 檢查 div 元素
讓我們考慮一個簡單的示例來了解 isDOMComponent() 的工作原理。因此,我們將建立一個簡單的 App 元件,其中我們將有一個函式 checkIfDOMComponent()。在這個元件內部,我們使用 isDOMComponent() 來檢查 elementToCheck 是否為 DOM 元件。然後,當點選按鈕時,我們將顯示結果。讓我們看看程式碼 -
import React from 'react';
import { isDOMComponent } from 'react-dom/test-utils';
const App = () => {
function checkIfDOMComponent() {
const isDOM = isDOMComponent(elementToCheck);
console.log("Is it a DOM component? " + isDOM);
}
const elementToCheck = <div>Hello, I am a div element!</div>;
return (
<div>
<h1>React App</h1>
<button onClick={checkIfDOMComponent}>Check Component</button>
{elementToCheck}
</div>
);
}
export default App;
輸出
示例 - 天氣應用
此程式碼表示一個簡單的 React 天氣應用元件 (Weather.js) 和一個使用 @testing-library/react 庫的相應測試檔案 (Weather.test.js)。Weather 元件是一個函式式 React 元件,它使用 useState hook 來管理城市和溫度的狀態。getTemperature 函式被模擬以非同步獲取溫度,為了簡單起見,它生成一個隨機溫度。程式碼如下 -
Weather.js
import React, { useState } from 'react';
function Weather() {
const [city, setCity] = useState('');
const [temperature, setTemperature] = useState(null);
const getTemperature = async () => {
const randomTemperature = Math.floor(Math.random() * 40) + 1;
setTemperature(randomTemperature);
};
return (
<div>
<h2>Weather App</h2>
<div>
<label htmlFor="cityInput">Enter City:</label>
<input
type="text"
id="cityInput"
value={city}
onChange={(e) => setCity(e.target.value)}
/>
<button onClick={getTemperature}>Get Temperature</button>
</div>
{temperature !== null && (
<p>
The temperature in {city} is {temperature}°C.
</p>
)}
</div>
);
}
export default Weather;
Weather.test.js
import React from 'react';
import { render, fireEvent, waitFor } from '@testing-library/react';
import Weather from './Weather';
test('renders weather component and fetches temperature', async () => {
const { getByText, getByLabelText } = render(<Weather />);
const cityInput = getByLabelText(/enter city/i);
fireEvent.change(cityInput, { target: { value: 'New York' } });
const getTemperatureButton = getByText(/get temperature/i);
fireEvent.click(getTemperatureButton);
await waitFor(() => {
const temperatureElement = getByText(/the temperature in new york/i);
expect(temperatureElement).toBeInTheDocument();
expect(temperatureElement).toBeInstanceOf(HTMLElement); // Using isDOMComponent()
});
});
輸出
示例 - 圖片庫應用
此程式碼包含一個簡單的 React 圖片庫元件 (ImageGallery.js) 和一個使用 @testing-library/react 庫的相應測試檔案 (ImageGallery.test.js)。測試透過確保每個影像元素都存在於文件中來檢查 ImageGallery 元件是否正確渲染。它利用 @testing-library/react 中的 render 函式來建立用於測試的虛擬 DOM。此應用的程式碼如下 -
ImageGallery.js
import React, { useState } from 'react';
function ImageGallery() {
const [images, setImages] = useState([
'image1.jpg',
'image2.jpg',
'image3.jpg',
]);
return (
<div>
<h2>Image Gallery</h2>
<div>
{images.map((image, index) => (
<img key={index} src={image} alt={`Image ${index + 1}`} />
))}
</div>
</div>
);
}
export default ImageGallery;
ImageGallery.test.js
import React from 'react';
import { render } from '@testing-library/react';
import ImageGallery from './ImageGallery';
test('renders image gallery component', () => {
const { getByAltText } = render(<ImageGallery />);
for (let i = 1; i <= 3; i++) {
const imageElement = getByAltText(`Image ${i}`);
expect(imageElement).toBeInTheDocument();
expect(imageElement).toBeInstanceOf(HTMLElement); // Using isDOMComponent()
}
});
輸出
總結
因此,每當我們呼叫 isDOMComponent(instance) 時,如果例項是 DOM 元件,它將返回 true,否則返回 false。此函式檢查元素是標準 HTML 元素還是自定義的 React 元件。