React 中ref的几种用法

React 中ref的几种用法

1.字符串

通过 this.refs.a 来引用真实dom的节点
dom 节点上使用

 <input  type ="text" ref="a"/> 
2.回调函数

回调函数就是在dom节点或组件上挂载函数,函数的入参是dom节点或组件实例,达到的效果与字符串形式是一样的,
都是获取其引用。

<input type="text" ref={(input)=>{this.textInput=input}} 
3.React.createRef()

在React 16.3版本后,使用此方法来创建ref。将其赋值给一个变量,通过ref挂载在dom节点或组件上,该ref的current属性将能拿到dom节点或组件的实例

class Counter extends Component {
    constructor() {
        super()
        this.state ={sum:0,number:0}
        this.myRef = React.createRef();
    }
    change = () =>{
        this.setState({...this.state,sum: Number(this.textInput.value) + Number(this.myRef.current.value)})
    }
    componentDidMount(){
        console.log(this.myRef.current.value);
    }
    render() {
        return (
            <div onChange ={this.change} >
                <input type="text" ref={(input)=>{this.textInput=input}} />+ 
                <input  type ="text" ref={this.myRef} /> = {this.state.sum}
            </div>
            
        )
    }
}

如何创建一个注脚

一个具有注脚的文本。1

注释也是必不可少的

Markdown将文本转换为 HTML

KaTeX数学公式

您可以使用渲染LaTeX数学表达式 KaTeX:

Gamma公式展示 Γ ( n ) = ( n − 1 ) ! ∀ n ∈ N \Gamma(n) = (n-1)!\quad\forall n\in\mathbb N Γ(n)=(n1)!nN 是通过欧拉积分

Γ ( z ) = ∫ 0 ∞ t z − 1 e − t d t &ThinSpace; . \Gamma(z) = \int_0^\infty t^{z-1}e^{-t}dt\,. Γ(z)=0tz1etdt.

你可以找到更多关于的信息 LaTeX 数学表达式here.

新的甘特图功能,丰富你的文章

Mon 06 Mon 13 Mon 20 已完成 进行中 计划一 计划二 现有任务 Adding GANTT diagram functionality to mermaid
  • 关于 甘特图 语法,参考 这儿,

UML 图表

可以使用UML图表进行渲染。 Mermaid. 例如下面产生的一个序列图::

张三 李四 王五 你好!李四, 最近怎么样? 你最近怎么样,王五? 我很好,谢谢! 我很好,谢谢! 李四想了很长时间, 文字太长了 不适合放在一行. 打量着王五... 很好... 王五, 你怎么样? 张三 李四 王五

这将产生一个流程图。:

链接
长方形
圆角长方形
菱形
  • 关于 Mermaid 语法,参考 这儿,

FLowchart流程图

我们依旧会支持flowchart的流程图:

Created with Raphaël 2.2.0 开始 我的操作 确认? 结束 yes no
  • 关于 Flowchart流程图 语法,参考 这儿.

导出与导入

导出

如果你想尝试使用此编辑器, 你可以在此篇文章任意编辑。当你完成了一篇文章的写作, 在上方工具栏找到 文章导出 ,生成一个.md文件或者.html文件进行本地保存。

导入

如果你想加载一篇你写过的.md文件或者.html文件,在上方工具栏可以选择导入功能进行对应扩展名的文件导入,
继续你的创作。


  1. 注脚的解释 ↩︎

### 如何在 React 中使用 `ref` 进行 DOM 操作或访问组件实例 #### 使用 `React.createRef` 当需要创建一个传统的回调形式的 `ref` 时,可以使用 `React.createRef()` 方法。此方法会在组件挂载时分配一个新的容器来保存对 DOM 节点或者类组件实例的引用[^1]。 ```javascript class MyComponent extends React.Component { constructor(props) { super(props); this.inputRef = React.createRef(); } focusInput() { if (this.inputRef.current) { this.inputRef.current.focus(); // 访问实际的DOM节点并调用focus方法 } } render() { return ( <div> <input type="text" ref={this.inputRef} /> <button onClick={() => this.focusInput()}> Focus Input </button> </div> ); } } ``` #### 使用 `useRef` 钩子 对于函数式组件来说,推荐使用 `useRef` 来代替 `createRef`。它不仅能够存储对 DOM 的引用,还可以用来保持任何可变值,在多次渲染之间不会改变。 ```javascript function TextInputWithFocusButton() { const inputEl = useRef(null); const onButtonClick = () => { if (inputEl && inputEl.current) { inputEl.current.focus(); // 直接操作DOM元素 } }; return ( <> <input ref={inputEl} type="text" /> <button onClick={onButtonClick}>Focus the input</button> </> ); } ``` #### 使用 `forwardRef` 将 Refs 向下传递给子组件 如果希望父组件能直接获取到某个子组件内部的具体 DOM 或者实例,则需要用到 `React.forwardRef` 工具。 ```javascript const FancyButton = React.forwardRef((props, ref) => ( <button ref={ref} className="FancyButton"> {props.children} </button> )); // 父级可以直接拿到按钮的真实dom对象 <FancyButton ref={(btn) => console.log('Btn:', btn)}>Click me!</FancyButton>; ``` #### 反向访问非受控组件中的 DOM 实例 有时我们需要处理一些表单输入字段作为非受控组件的情况,此时可以通过 refs 获取这些 HTML 元素的实际状态数据[^2]。 ```javascript class Form extends React.Component { constructor(props){ super(props); this.textInput = React.createRef(); } handleSubmit(event){ alert(`Value: ${this.textInput.current.value}`); event.preventDefault(); } render(){ return( <form onSubmit={(e)=>this.handleSubmit(e)}> <input type='text' ref={this.textInput}/> <button>Submit</button> </form> ) } } ``` #### 总结 以上介绍了几种不同的方式用于在 React 应用程序中实现对底层 DOM 元素的操作以及如何利用它们完成特定功能需求。无论是通过声明式的 API 设计还是借助于更灵活的方法论支持复杂场景下的交互逻辑构建都显得尤为重要。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值