react ref 的使用

ref 的使用


import React, { Component, createRef } from 'react';
import BScroll from "better-scroll" // 引入滚动 移动端用的多
//使用先实例化 ()小括号里加入滚动的对象 new BScroll()

// ()小括号保证优先级 把点重复100次
let list = [...(".").repeat(100)] 
console.log(list)

class App extends Component {

  // 注意ref:在 组件挂载完成之后及更新之后使用
  componentDidMount(){
    // console.log(this.refs.box)  //ref绑定后 refs 有div 获取到dom节点
    // new BScroll(this.refs.box)  //老版本
    new BScroll(this.box.current)    //新版本 box不在refs中 直接在this中可以找到

  }
  box = createRef(); //新版创建一个box 多个ref要使用的话 在去创建

  render() {  

    return (
            <div
              style={{
                width:"200px",
                height:"300px",
                border:"1px solid",
                // 超出隐藏
                overflow:"hidden"
              }}
              ref = "box" //字符串形式,快要废弃尽量不使用
              ref = {this.box} //新版 创建box对象,多个要使用的话 在去创建
            >
              <ul
                style ={{
                  margin:0,
                  padding:0,
                  // 
                  listStyleL:"none"
                }}
              >

              {
                list.map((item,index)=>{
                  return <li key={index}>这是第{index}个数据</li>
                })
              }
              </ul>
            </div>
           );
  }
}
export default App;

ref和声明周期结合的时候 只要不做修改ref,就会存储初始的值(变化前的值)
ref不绑定标签 绑定数据绑定txt数据


import React,{useState,useEffect,useRef} from 'react';

function Child(props){ //props 接收父 参数
    // console.log(props)
    // let data = props.data 1不结构
    let {data} = props //2解构方法
    let [ages, setage] = useState(8)
    // ref 的使用
    let agep = useRef()

    let [txt, settxt] = useState("文字")

    //ref和声明周期结合的时候 只要不做修改ref,就会存储初始的值(变化前的值)
    let txtP = useRef(txt) // 不绑定标签 绑定数据绑定txt数据,

    // 这里获取的是dom节点 注意要在挂载之后获取
    // console.log(agep.current)
    useEffect(()=>{

        console.log(txtP.current,txt) //ref 要绑定数据 不要绑定标签
        //这里没有修改之前txtP.current永远获取到初始值,修改后获取到变化前的值
        txtP.current = txt  
        
    },[txt])
    let message= `你好啊啊啊啊`


  return <div>
            <h1>名称:{data.name}</h1>
            {/*      age不是传递过来的数据 是本地 */}
            <h3 ref= {agep}>age:{ages}</h3>

            <button onClick={()=>{
                setage(++ages)
            }}>
                涨一岁
            </button>

            <p>{txt}</p>
            <input
                type = "text"
                value= {txt}
                onChange={({target})=>{
                    settxt(target.value)
                }}        
            />
            <p
                dangerouslySetInnerHTML={{
                    __html:message
                }}
            ></p>

        </div>
}


export default Child;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Jason–json

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值