成人午夜视频全免费观看高清-秋霞福利视频一区二区三区-国产精品久久久久电影小说-亚洲不卡区三一区三区一区

react中的DOM操作怎么實現(xiàn)

這篇“react中的DOM操作怎么實現(xiàn)”文章的知識點大部分人都不太理解,所以小編給大家總結(jié)了以下內(nèi)容,內(nèi)容詳細,步驟清晰,具有一定的借鑒價值,希望大家閱讀完這篇文章能有所收獲,下面我們一起來看看這篇“react中的DOM操作怎么實現(xiàn)”文章吧。

十載的靖遠網(wǎng)站建設(shè)經(jīng)驗,針對設(shè)計、前端、開發(fā)、售后、文案、推廣等六對一服務(wù),響應(yīng)快,48小時及時工作處理。成都營銷網(wǎng)站建設(shè)的優(yōu)勢是能夠根據(jù)用戶設(shè)備顯示端的尺寸不同,自動調(diào)整靖遠建站的顯示方式,使網(wǎng)站能夠適用不同顯示終端,在瀏覽器中調(diào)整網(wǎng)站的寬度,無論在任何一種瀏覽器上瀏覽網(wǎng)站,都能展現(xiàn)優(yōu)雅布局與設(shè)計,從而大程度地提升瀏覽體驗。創(chuàng)新互聯(lián)建站從事“靖遠網(wǎng)站設(shè)計”,“靖遠網(wǎng)站推廣”以來,每個客戶項目都認真落實執(zhí)行。

使用場景

下面是幾個適合使用 refs 的情況

1、處理焦點、文本選擇或媒體控制

2、觸發(fā)強制動畫

3、集成第三方 DOM 庫

如果可以通過聲明式實現(xiàn),則盡量避免使用 refs

[注意]不要在 Dialog 組件上直接暴露 open() 和 close() 方法,最好傳遞 isOpen 屬性

ref

React 支持給任意組件添加特殊屬性。ref 屬性接受一個回調(diào)函數(shù),它在組件被加載或卸載時會立即執(zhí)行

[注意]在組件mount之后再去獲取ref。componentWillMount和第一次render時都獲取不到,在componentDidMount才能獲取到

【HTML元素】

當(dāng)給 HTML 元素添加 ref 屬性時,ref 回調(diào)接收了底層的 DOM 元素作為參數(shù)

React 組件在加載時將 DOM 元素傳入 ref 的回調(diào)函數(shù),在卸載時則會傳入 null。ref 回調(diào)會在componentDidMount 或 componentDidUpdate 這些生命周期回調(diào)之前執(zhí)行。

class CustomTextInput extends React.Component {
  constructor(props) {
    super(props);
    this.focus = this.focus.bind(this);
  }
  focus() {
    this.textInput.focus();
  }
  render() {
    return (
      <div>
        <input
          type="text"
          ref={(input) => { this.textInput = input; }} />
        <input
          type="button"
          value="Focus the text input"
          onClick={this.focus}
        />
      </div>
    );
  }
}

更簡短的寫法如下

ref={input => this.textInput = input}

【類組件】

當(dāng) ref 屬性用于使用 class 聲明的自定義組件時,ref 的回調(diào)接收的是已經(jīng)加載的 React 實例

class AutoFocusTextInput extends React.Component {
  componentDidMount() {
    this.textInput.focusTextInput();
  }

  render() {
    return (
      <CustomTextInput
        ref={(input) => { this.textInput = input; }} />
    );
  }
}

[注意]這種方法僅對 class 聲明的 CustomTextInput 有效

【函數(shù)式組件】

不能在函數(shù)式組件上使用 ref 屬性,因為它們沒有實例

【對父組件暴露DOM節(jié)點】

在子節(jié)點上暴露一個特殊的屬性。子節(jié)點將會獲得一個函數(shù)屬性,并將其作為 ref 屬性附加到 DOM 節(jié)點。這允許父代通過中間件將 ref 回調(diào)給子代的 DOM 節(jié)點

該方法適用于類組件和函數(shù)式組件

function CustomTextInput(props) {
  return (
    <div>
      <input ref={props.inputRef} />
    </div>
  );
}

class Parent extends React.Component {
  render() {
    return (
      <CustomTextInput
        inputRef={el => this.inputElement = el}
      />
    );
  }
}

在上面的例子中,Parent 將它的 ref 回調(diào)作為一個特殊的 inputRef 傳遞給 CustomTextInput,然后 CustomTextInput 通過 ref 屬性將其傳遞給 <input>。最終,Parent 中的 this.inputElement 將被設(shè)置為與 CustomTextInput 中的 <input> 元素相對應(yīng)的 DOM 節(jié)點

非受控組件

要編寫一個非受控組件,而非為每個狀態(tài)更新編寫事件處理程序,可以使用 ref 從 DOM 獲取表單值

[注意]可能通過e.target.value取得DOM值,而不用綁定react

class NameForm extends React.Component {
  constructor(props) {
    super(props);
    this.handleSubmit = this.handleSubmit.bind(this);
  }

  handleSubmit(event) {
    alert("A name was submitted: " + this.input.value);
    event.preventDefault();
  }

  render() {
    return (
      <form onSubmit={this.handleSubmit}>
        <label>
          Name:
          <input type="text" ref={(input) => this.input = input} />
        </label>
        <input type="submit" value="Submit" />
      </form>
    );
  }
}

由于非受控組件將真實數(shù)據(jù)保存在 DOM 中,因此在使用非受控組件時,更容易同時集成React和非React代碼

【默認值】

在 React 的生命周期中,表單元素上的 value 屬性將會覆蓋 DOM 中的值。使用非受控組件時,通常希望 React 可以為其指定初始值,但不再控制后續(xù)更新。要解決這個問題,可以指定一個 defaultValue 屬性而不是 value

render() {
  return (
    <form onSubmit={this.handleSubmit}>
      <label>
        Name:
        <input
          defaultValue="Bob"
          type="text"
          ref={(input) => this.input = input} />
      </label>
      <input type="submit" value="Submit" />
    </form>
  );
}

同樣,<input type="checkbox"> 和 <input type="radio"> 支持 defaultChecked,<select> 和 <textarea> 支持 defaultValue

ReactDOM

react-dom這個軟件包提供了針對DOM的方法,可以在應(yīng)用的頂級域中調(diào)用,也可以在有需要的情況下用作跳出React模型的出口。但大部分組件都不應(yīng)該需要使用這個包

render()
unmountComponentAtNode()
findDOMNode()

【render()】

ReactDOM.render(
  element,
  container,
  [callback]
)

渲染一個React元素,添加到位于提供的container里的DOM元素中,并返回這個組件的一個 引用 (或者對于無狀態(tài)組件返回null)

如果這個React元素之前已經(jīng)被渲染到container里去了,這段代碼就會進行一次更新,并且只會改變那些反映元素最新狀態(tài)所必須的DOM元素

【unmountComponentAtNode()】

ReactDOM.unmountComponentAtNode(container)
從DOM元素中移除已掛載的React組件,清除它的事件處理器和state。如果容器內(nèi)沒有掛載任何組件,這個函數(shù)什么都不會干。 有組件被卸載的時候返回true,沒有組件可供卸載時返回 false

【findDOMNode()】

ReactDOM.findDOMNode(component)
如果這個組件已經(jīng)被掛載到DOM中,函數(shù)會返回對應(yīng)的瀏覽器中生成的DOM元素 。需要從DOM中讀取值時,比如表單的值,或者計算DOM元素的尺寸,這個函數(shù)會非常有用。 大多數(shù)情況下,可以添加一個指向DOM節(jié)點的引用,從而完全避免使用findDOMNode 這個函數(shù)。當(dāng) render 返回 null 或者 false 時, findDOMNode 也返回 null

新ref

版本16.3 之前,React 有兩種提供 ref 的方式:字符串和回調(diào),因為字符串的方式有些問題,所以官方建議使用回調(diào)來使用 ref。而現(xiàn)在引入的 createRef API,據(jù)官方說是一種零缺點的使用 ref 的方式,回調(diào)方式也可以讓讓路了

class MyComponent extends React.Component {
  constructor(props) {
    super(props);
    this.myRef = React.createRef();
  }
  render() {
    return <div ref={this.myRef} />;
  }
}

然后使用current屬性,即可獲得當(dāng)前元素

this.myRef.current

典型應(yīng)用如下所示

  constructor(props){
    super(props)
    this.Mask = React.createRef()
    this.MenuList = React.createRef()
  }
  handleClick = () => {
    ReactDOM.findDOMNode(this.MenuList.current).classList.toggle("transform-zero")
    ReactDOM.findDOMNode(this.Mask.current).classList.toggle("mask-show")
  }

   [注意]使用styledComponents樣式化的元素暴露的接口是innerRef,而不是ref

<Wrap innerRef={this.itemRef}>

以上就是關(guān)于“react中的DOM操作怎么實現(xiàn)”這篇文章的內(nèi)容,相信大家都有了一定的了解,希望小編分享的內(nèi)容對大家有幫助,若想了解更多相關(guān)的知識內(nèi)容,請關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。

網(wǎng)頁題目:react中的DOM操作怎么實現(xiàn)
轉(zhuǎn)載源于:http://jinyejixie.com/article14/gcidge.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供Google、營銷型網(wǎng)站建設(shè)、動態(tài)網(wǎng)站、響應(yīng)式網(wǎng)站、品牌網(wǎng)站建設(shè)、定制開發(fā)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

網(wǎng)站托管運營
八宿县| 沁阳市| 临颍县| 靖西县| 北票市| 尤溪县| 绥阳县| 会昌县| 云梦县| 淄博市| 枞阳县| 武冈市| 新余市| 河曲县| 平乡县| 敦化市| 天等县| 敦化市| 集安市| 根河市| 琼结县| 固镇县| 吉木乃县| 陆良县| 衡南县| 丰台区| 邻水| 静海县| 新化县| 容城县| 江永县| 河间市| 扶余县| 东平县| 保康县| 克山县| 宁德市| 布拖县| 略阳县| 青铜峡市| 嘉定区|