zoukankan      html  css  js  c++  java
  • [OHIF-Viewers]医疗数字阅片-医学影像-获取焦点的2种方式-ref

    [OHIF-Viewers]医疗数字阅片-医学影像-获取焦点的2种方式-ref

    前言
    在React中,只要props或state发生改变,则render()方法必定执行,即DOM会更新。然React更新DOM时,可能会导致已经获取焦点的元素失去焦点,故此时需要操作DOM,获取焦点。

    方式一:

    React.createRef()
    使用React.createRef()方法可以创建一个存储dom的ref,当ref设置在组件上时,即可存储该元素的dom引用。

    // index.js
    import React from 'react'
    import CustomTextInput from './CustomTextInput'
    
    class Parent extends React.Component {
      constructor(props) {
        super(props);
        // 创建一个ref存储dom元素
        this.inputElement = React.createRef();
        this.getFocus = this.getFocus.bind(this)
      }
    
      getFocus() {
        this.inputElement.current.focus()
      }
    
      render() {
        return (
          <CustomTextInput
            inputRef={this.inputElement}
            inputGetFocus={this.getFocus}
          />
        )
      }
    }
    
    export default Parent
    // CustomTextInput.js
    import React from 'react'
    
    const CustomTextInput = (props) => {
      return (
        <React.Fragment>
          <input
            type="text"
            ref={props.inputRef}
          />
          <button onClick={props.inputGetFocus}>获取焦点</button>
        </React.Fragment>
      )
    }
    
    export default CustomTextInput

    方式二:使用函数

    // index.js
    import React from 'react'
    import CustomTextInput from './CustomTextInput'
    
    class Parent extends React.Component {
      constructor(props) {
        super(props);
        this.getInputElement = this.getInputElement.bind(this)
        this.getFocus = this.getFocus.bind(this)
      }
    
      getFocus() {
        this.inputElement.focus()
      }
    
      getInputElement(el) {
        this.inputElement = el
      }
    
      render() {
        return (
          <CustomTextInput
            inputRef={this.getInputElement}
            inputGetFocus={this.getFocus}
          />
        )
      }
    }
    
    export default Parent

     OHIF是酱紫实现的:

        <div className="ViewportDownloadForm" >
          <div
            style={{
              height: viewportElementDimensions.height,
               viewportElementDimensions.width,
              position: 'absolute',
              left: '9999px',
            }}
            ref={ref => setViewportElement(ref)}
          >
  • 相关阅读:
    CSS3实现投影效果
    @font-face使用在线字体
    JS全局对象的属性
    const命令声明变量应注意的几点
    IDEA设置不区分大小写提示
    分布式ID生成-雪花算法
    项目Git分支管理规范
    IDEA使用Mybatis插件 MyBatisCodeHelper-Pro
    解决码云出现git@gitee.com: Permission denied (publickey).
    安装RabbitMQ,一直提示Erlang版本过低
  • 原文地址:https://www.cnblogs.com/landv/p/13273468.html
Copyright © 2011-2022 走看看