React 组件实例的三大核心—refs

0x00 前言

文中工具皆可关注 皓月当空w 公众号 发送关键字 工具 获取

0x01 字符型的refs

refs就是document中的id

1.获取ref

class Demo extends React.Component {
            render() {
                return (
                    <div>
                        <input ref="input1" type="text" placeholder="点击按钮提示数据" />&nbsp;
                        <button onClick={this.showData}>点我提示左侧的数据</button>&nbsp;
                        <input type="text" placeholder="点击按钮提示数据" />
                    </div>
                )
            }

            showData = () => {
                console.log(this.refs.input1)
            }
        }

        ReactDOM.render(<Demo/>, document.getElementById("test"))
    </script>

2.结构赋值

   <script type="text/babel">
        class Demo extends React.Component {
            render() {
                return (
                    <div>
                        <input ref="input1" type="text" placeholder="点击按钮提示数据" />&nbsp;
                        <button onClick={this.showData}>点我提示左侧的数据</button>&nbsp;
                        <input onBlur={this.showData2} type="text" placeholder="点击按钮提示数据" />
                    </div>
                )
            }

            showData = () => {
                const {input1} = this.refs
                alert(input1.value)
            }

            showData2=()=>{
                
            }
        }

        ReactDOM.render(<Demo/>, document.getElementById("test"))
    </script>

3.字符串类型的refs 过时的原因

  • 效率不高

0x02 回调函数的refs

1.实现

<script type="text/babel">
        class Demo extends React.Component {
            render() {
                return (
                    <div>
                        <input ref={c=>this.input1 = c} type="text" placeholder="点击按钮提示数据" />&nbsp;
                        <button onClick={this.showData}>点我提示左侧的数据</button>&nbsp;
                        <input ref={c=>this.input2 = c}  onBlur={this.showData2} type="text" placeholder="点击按钮提示数据" />&nbsp;
                    </div>
                )
            }

            showData = () => {
                const {input1} = this
                alert(input1.value)
            }

            showData2=()=>{
                const {input2} =this
                alert(input2.value)
            }
        }

        ReactDOM.render(<Demo/>, document.getElementById("test"))
    </script>

2.调用次数

更新状态后,组件会填充为null,然后再进行调用

    <script type="text/babel">
        class Demo extends React.Component{

            state={isHot:false}

            render(){
                const {isHot} =this.state
                return (
                    <div>
                        <h2>今天天气很{isHot?'炎热':'凉爽'}</h2>
                        <input ref= {(c)=>{this.input1=c;console.log(c)}} type="text"/>
                        <br/>
                        <br/>
                        <button onClick={this.showInfo}>点我提示输入的数据</button> 
                        <button  onClick={this.changeWeather}>点我切换天气</button>   
                    </div>
                )
            }

            showInfo = ()=>{
                const {input1} =this
                alert(input1.value)
            }

            changeWeather =()=>{
                const {isHot} =this.state
                this.setState({isHot:!isHot})
            }
        }

        ReactDOM.render(<Demo/>,document.getElementById("test"))
    </script>

3.类绑定的方式

<script type="text/babel">
        class Demo extends React.Component{

            state={isHot:false}

            render(){
                const {isHot} =this.state
                return (
                    <div>
                        <h2>今天天气很{isHot?'炎热':'凉爽'}</h2>
                        {/* <input ref= {(c)=>{this.input1=c;console.log(c)}} type="text"/>*/}
                        <input ref= {this.saveInput} type="text"/>
                        <br/>
                        <br/>
                        <button onClick={this.showInfo}>点我提示输入的数据</button> 
                        <button  onClick={this.changeWeather}>点我切换天气</button>   
                    </div>
                )
            }

            saveInput = (c)=>{
                this.input1=c;
                console.log(c)
            }

            showInfo = ()=>{
                const {input1} =this
                alert(input1.value)
            }

            changeWeather =()=>{
                const {isHot} =this.state
                this.setState({isHot:!isHot})
            }
        }

        ReactDOM.render(<Demo/>,document.getElementById("test"))
    </script>

0x03 createRef

React.createRef 是专人专用的,每一个ref都要单独重新创建

1.创建实例

<script type="text/babel">
        class Demo extends React.Component{

            myRef = React.createRef()

            state={isHot:false}

            render(){
                const {isHot} =this.state
                return (
                    <div>
                        <input ref= {this.myRef} type="text"/>
                        <br/>
                        <br/>
                        <button onClick={this.showInfo}>点我提示输入的数据</button>  
                    </div>
                )
            }

            showInfo = ()=>{
                alert(this.myRef.current.value)
            }

        }

        ReactDOM.render(<Demo/>,document.getElementById("test"))
    </script>

other

欢迎大家关注我朋友的公众号 皓月当空w 分享漏洞情报以及各种学习资源,技能树,面试题等。

以上

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
React 中,父组件获取子组件实例有几种常见的方法: 1. 使用 Refs:在父组件中,可以通过使用 `ref` 属性为子组件创建一个 ref,并将其附加到子组件实例上。然后可以通过 `ref.current` 来访问子组件实例。例如: ```jsx class ParentComponent extends React.Component { constructor(props) { super(props); this.childRef = React.createRef(); } componentDidMount() { console.log(this.childRef.current); // 访问子组件实例 } render() { return <ChildComponent ref={this.childRef} />; } } class ChildComponent extends React.Component { render() { return <div>Hello, World!</div>; } } ``` 2. 使用回调函数:在子组件中定义一个接受子组件实例作为参数的回调函数,并通过属性传递给子组件。子组件在合适的时机调用该回调函数,将自身实例作为参数传递给父组件。例如: ```jsx class ParentComponent extends React.Component { handleChildRef = (childRef) => { console.log(childRef); // 访问子组件实例 }; render() { return <ChildComponent onRef={this.handleChildRef} />; } } class ChildComponent extends React.Component { componentDidMount() { this.props.onRef(this); // 将子组件实例传递给父组件 } render() { return <div>Hello, World!</div>; } } ``` 这两种方法都可以让父组件获取子组件实例。在选择使用哪种方法时,可以根据具体的场景和需求来决定。一般来说,使用 Refs 是最常用的方式,但如果需要在子组件挂载后立即获取实例,则使用回调函数的方式更适合。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值