欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

React合成事件及Test Utilities在Facebook內(nèi)部進(jìn)行測(cè)試

 更新時(shí)間:2022年12月23日 17:08:50   作者:黎燃  
這篇文章主要介紹了React合成事件及Test Utilities在Facebook內(nèi)部進(jìn)行測(cè)試,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

合成事件

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實(shí)例將傳遞給事件處理程序,它是瀏覽器本地事件的跨瀏覽器包裝器。除了與所有瀏覽器兼容外,它還具有與瀏覽器本機(jī)事件相同的接口,包括stopPropagation()和preventDefault()。 如果出于某種原因,需要使用瀏覽器的基礎(chǔ)事件,則只需使用nativeEvent屬性即可獲得它。

從v0.14開(kāi)始,當(dāng)事件處理程序返回false時(shí),不再阻止事件氣泡。您可以選擇改用e.stopPropagation()或e.preventDefault()。 不起作用,this.state.clickEvent 的值將會(huì)只包含 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});
  // 你仍然可以導(dǎo)出事件屬性
  this.setState({eventType: event.type});
}

SyntheticEvent被合并。這意味著可以重用SyntheticEvent對(duì)象,并且在調(diào)用事件回調(diào)函數(shù)后,所有屬性都將無(wú)效。出于性能原因,您不能異步訪問(wèn)事件。

number pointerId
number width
number height
number pressure
number tangentialPressure
number tiltX
number tiltY
number twist
string pointerType
boolean isPrimary

Test Utilities

ReactTestUtils可以與您選擇的測(cè)試框架一起使用,以便輕松測(cè)試React組件。在Facebook內(nèi)部,我們使用Jest輕松實(shí)現(xiàn)JavaScript測(cè)試。

import ReactTestUtils from 'react-dom/test-utils'; // ES6
var ReactTestUtils = require('react-dom/test-utils'); // ES5 使用 npm 的方式

act()

為斷言準(zhǔn)備一個(gè)組件,包裝要呈現(xiàn)的代碼,并在調(diào)用act()時(shí)執(zhí)行更新。這將使測(cè)試更接近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>
    );
  }
}

不要忘記,觸發(fā)器DOM事件僅在將DOM容器添加到文檔時(shí)生效。您可以使用React Testing Library這樣的庫(kù)來(lái)減少樣板代碼。

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', () => {
  // 首先測(cè)試 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');
  // 再測(cè)試 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組件。與通常的渲染不同,組件將變成一個(gè)簡(jiǎn)單的<div>(如果提供了mockTagName,則為其他標(biāo)記),包括任何提供的子級(jí)。

scryRenderedComponentsWithType(
  tree,
  componentClass
)

這個(gè)包提供了一個(gè)React渲染器,可以將React組件渲染為純JavaScript對(duì)象,而不依賴(lài)DOM或本地移動(dòng)環(huán)境。 這個(gè)包的主要功能是在某個(gè)時(shí)間點(diǎn)返回由React DOM或React Native平臺(tái)呈現(xiàn)的視圖結(jié)構(gòu)(類(lèi)似于DOM樹(shù))的快照,而不依賴(lài)瀏覽器或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());

以上就是React合成事件及Test Utilities在Facebook內(nèi)部進(jìn)行測(cè)試的詳細(xì)內(nèi)容,更多關(guān)于React合成Test Utilities測(cè)試的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • React?Native性能優(yōu)化指南及問(wèn)題小結(jié)

    React?Native性能優(yōu)化指南及問(wèn)題小結(jié)

    本文將介紹在React?Native開(kāi)發(fā)中常見(jiàn)的性能優(yōu)化問(wèn)題和解決方案,包括ScrollView內(nèi)無(wú)法滑動(dòng)、熱更新導(dǎo)致的文件引用問(wèn)題、高度獲取、強(qiáng)制橫屏UI適配、低版本RN適配iOS14、緩存清理、navigation參數(shù)取值等,感興趣的朋友一起看看吧
    2024-01-01
  • React網(wǎng)絡(luò)請(qǐng)求發(fā)起方法詳細(xì)介紹

    React網(wǎng)絡(luò)請(qǐng)求發(fā)起方法詳細(xì)介紹

    在編程開(kāi)發(fā)中,網(wǎng)絡(luò)數(shù)據(jù)請(qǐng)求是必不可少的,這篇文章主要介紹了React網(wǎng)絡(luò)請(qǐng)求發(fā)起方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)吧
    2022-09-09
  • react實(shí)現(xiàn)全局組件確認(rèn)彈窗

    react實(shí)現(xiàn)全局組件確認(rèn)彈窗

    這篇文章主要為大家詳細(xì)介紹了react實(shí)現(xiàn)全局組件確認(rèn)彈窗,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-08-08
  • 基于React封裝一個(gè)層次模糊效果的容器組件

    基于React封裝一個(gè)層次模糊效果的容器組件

    這篇文章主要為大家詳細(xì)介紹了如何基于React封裝一個(gè)層次模糊效果的容器組件,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2024-03-03
  • react中定義變量并使用方式

    react中定義變量并使用方式

    這篇文章主要介紹了react中定義變量并使用方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-02-02
  • React Native模塊之Permissions權(quán)限申請(qǐng)的實(shí)例相機(jī)

    React Native模塊之Permissions權(quán)限申請(qǐng)的實(shí)例相機(jī)

    這篇文章主要介紹了React Native模塊之Permissions權(quán)限申請(qǐng)的實(shí)例相機(jī)的相關(guān)資料,希望通過(guò)本文能幫助到大家,需要的朋友可以參考下
    2017-09-09
  • React星星評(píng)分組件的實(shí)現(xiàn)

    React星星評(píng)分組件的實(shí)現(xiàn)

    評(píng)分插件在購(gòu)物的應(yīng)用中經(jīng)??梢钥吹玫?,但是用著別人的總是沒(méi)有自己寫(xiě)的順手,本文就使用React實(shí)現(xiàn)星星評(píng)分組件,感興趣的可以了解一下
    2021-06-06
  • react之組件通信詳解

    react之組件通信詳解

    本篇文章主要介紹了React組件通信詳解,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2021-10-10
  • react學(xué)習(xí)每天一個(gè)hooks?useWhyDidYouUpdate

    react學(xué)習(xí)每天一個(gè)hooks?useWhyDidYouUpdate

    這篇文章主要為大家介紹了react學(xué)習(xí)每天一個(gè)hooks?useWhyDidYouUpdate使用示例解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-04-04
  • react-router-dom6(對(duì)比?router5)快速入門(mén)指南

    react-router-dom6(對(duì)比?router5)快速入門(mén)指南

    這篇文章主要介紹了快速上手react-router-dom6(對(duì)比?router5),通過(guò)本文學(xué)習(xí)最新的react-router-dom?v6版本的路由知識(shí),并且會(huì)與v5老版本進(jìn)行一些對(duì)比,需要的朋友可以參考下
    2022-08-08

最新評(píng)論