網站首頁 編程語言 正文
合成事件
boolean bubbles
boolean cancelable
DOMEventTarget currentTarget
boolean defaultPrevented
number eventPhase
boolean isTrusted
DOMEvent nativeEvent
void preventDefault()
boolean isDefaultPrevented()
void stopPropagation()
boolean isPropagationStopped()
void persist()
DOMEventTarget target
number timeStamp
string type
SyntheticEvent實例將傳遞給事件處理程序,它是瀏覽器本地事件的跨瀏覽器包裝器。除了與所有瀏覽器兼容外,它還具有與瀏覽器本機事件相同的接口,包括stopPropagation()和preventDefault()。 如果出于某種原因,需要使用瀏覽器的基礎事件,則只需使用nativeEvent屬性即可獲得它。
從v0.14開始,當事件處理程序返回false時,不再阻止事件氣泡。您可以選擇改用e.stopPropagation()或e.preventDefault()。 不起作用,this.state.clickEvent 的值將會只包含 null
function onClick(event) {
console.log(event); // => nullified object.
console.log(event.type); // => "click"
const eventType = event.type; // => "click"
setTimeout(function() {
console.log(event.type); // => null
console.log(eventType); // => "click"
}, 0);
this.setState({clickEvent: event});
// 你仍然可以導出事件屬性
this.setState({eventType: event.type});
}
SyntheticEvent被合并。這意味著可以重用SyntheticEvent對象,并且在調用事件回調函數后,所有屬性都將無效。出于性能原因,您不能異步訪問事件。
number pointerId
number width
number height
number pressure
number tangentialPressure
number tiltX
number tiltY
number twist
string pointerType
boolean isPrimary
Test Utilities
ReactTestUtils可以與您選擇的測試框架一起使用,以便輕松測試React組件。在Facebook內部,我們使用Jest輕松實現JavaScript測試。
import ReactTestUtils from 'react-dom/test-utils'; // ES6
var ReactTestUtils = require('react-dom/test-utils'); // ES5 使用 npm 的方式
act()
為斷言準備一個組件,包裝要呈現的代碼,并在調用act()時執行更新。這將使測試更接近React在瀏覽器中的工作方式。
class Counter extends React.Component {
constructor(props) {
super(props);
this.state = {count: 0};
this.handleClick = this.handleClick.bind(this);
}
componentDidMount() {
document.title = `You clicked ${this.state.count} times`;
}
componentDidUpdate() {
document.title = `You clicked ${this.state.count} times`;
}
handleClick() {
this.setState(state => ({
count: state.count + 1,
}));
}
render() {
return (
<div>
<p>You clicked {this.state.count} times</p>
<button onClick={this.handleClick}>
Click me
</button>
</div>
);
}
}
不要忘記,觸發器DOM事件僅在將DOM容器添加到文檔時生效。您可以使用React Testing Library這樣的庫來減少樣板代碼。
import React from 'react';
import ReactDOM from 'react-dom';
import { act } from 'react-dom/test-utils';
import Counter from './Counter';
let container;
beforeEach(() => {
container = document.createElement('div');
document.body.appendChild(container);
});
afterEach(() => {
document.body.removeChild(container);
container = null;
});
it('can render and update a counter', () => {
// 首先測試 render 和 componentDidMount
act(() => {
ReactDOM.render(<Counter />, container);
});
const button = container.querySelector('button');
const label = container.querySelector('p');
expect(label.textContent).toBe('You clicked 0 times');
expect(document.title).toBe('You clicked 0 times');
// 再測試 render 和 componentDidUpdate
act(() => {
button.dispatchEvent(new MouseEvent('click', {bubbles: true}));
});
expect(label.textContent).toBe('You clicked 1 times');
expect(document.title).toBe('You clicked 1 times');
});
將仿真組件模塊傳遞到該方法中后,React模塊將填充有效的方法,使其成為虛擬React組件。與通常的渲染不同,組件將變成一個簡單的<div>(如果提供了mockTagName,則為其他標記),包括任何提供的子級。
scryRenderedComponentsWithType(
tree,
componentClass
)
這個包提供了一個React渲染器,可以將React組件渲染為純JavaScript對象,而不依賴DOM或本地移動環境。 這個包的主要功能是在某個時間點返回由React DOM或React Native平臺呈現的視圖結構(類似于DOM樹)的快照,而不依賴瀏覽器或jsdom。
import TestRenderer from 'react-test-renderer';
function Link(props) {
return <a href={props.page}>{props.children}</a>;
}
const testRenderer = TestRenderer.create(
<Link page="https://www.facebook.com/">Facebook</Link>
);
console.log(testRenderer.toJSON());
原文鏈接:https://juejin.cn/post/7173685018400096286
相關推薦
- 2022-06-06 詳解如何自定義Dubbo Filter(含dubbo2.7.X及以上版本和2.6.X及以下版本兩種寫
- 2022-07-30 Python開發時報TypeError:?‘int‘?object?is?not?iterable錯
- 2022-06-08 VM配置Centos7虛擬機
- 2022-05-28 C語言?超詳細講解算法的時間復雜度和空間復雜度_C 語言
- 2022-08-16 Docker中部署Redis集群與部署微服務項目的詳細過程_docker
- 2023-04-08 React中useCallback?useMemo到底該怎么用_React
- 2022-10-30 解決docker訪問外部https數字證書問題_docker
- 2022-07-11 UVM中設置打印信息的冗余度閾值和重載打印信息的嚴重性
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支