react hooks之useRef

在函数组件中的一个全局变量,不会因为重复 render 重复申明

const SaveVal = () => {
    let timer = setTimeout(() => {});
    let ref = useRef(timer);
    let [count, setCount] = useState(0)
    return (
        <div>
            {timer}~{ref.current}~{count}<br />
            <button onClick={() => setCount(x => x+1)}></button>
        </div>
    );
}

作用于Dom元素

const SaveEle = () => {
    let ref = useRef<HTMLInputElement>(null);
    let [val, setVal] = useState(0);
    return (
        <div>
            <div>{val}</div>
            <input ref={ref}/> <br />
            <button onClick={() => setVal(() => Number(ref.current!.value))}>get Value</button>
        </div>
    );
}

获取子组件的实例(只有类组件可用)

class Instance extends React.Component {
    state = {
        count: 0
    }
    public render() {
        return (
            <div>
                {this.state.count}<button onClick={() => {this.setState({count: this.state.count + 1})}}></button>
            </div>
        );
    }
}
const Cls = () => {
    let ref = useRef<Instance>(null);
    return (
        <>
            <Instance ref={ref}></Instance>
            {ref.current != null&&ref.current!.state.count}
        </>
    );
}

ref的值发生变化不会引起render

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值