useRef

作者: 未路过 | 来源:发表于2022-11-04 10:34 被阅读0次
image.png
const HelloWorld = function (props) {
  const ref = useRef();

  return <h2>HelloWorld</h2>;
};

useRef返回一个ref对象,这个helloWorld不论被执行多少次,这个ref返回的都是同一个对象。
两种用法:
1.引用DOM
这种用法和createRef的用法一样。
不能直接使用原生方法

import React, { memo, useEffect } from "react";

const App = memo(() => {
  useEffect(() => {
    const titleEl = document.querySelector(".title");
  }, []);
  return (
    <div>
      <h2 className="title">Hello World</h2>
      <button>查看titel的dom</button>
    </div>
  );
});

export default App;

并不能确保全部只有一个title属性,其他地方也有,
以前再类组件中有一个createRef。

 myRef = React.createRef();
<input
             ref={this.myRef}
             type="text"
             placeholder="点击按钮提示数据"
           />

```

再函数组件中使用useRef
```js
import React, { memo, useRef } from "react";

const App = memo(() => {
const titleRef = useRef();
const inputRef = useRef();
const showTitleDom = () => {
 console.log(titleRef.current); //节点对象
 console.log(titleRef.current.innerHTML); //Hello World
 inputRef.current.focus();
};
return (
 <div>
   <h2 className="title" ref={titleRef}>
     Hello World
   </h2>
   <button onClick={showTitleDom}>查看titel的dom</button>
   <input type="text" ref={inputRef}></input>
 </div>
);
});

export default App;
```

2.使用ref保存上一次的某一个值,解决闭包陷阱
useRef最大的特点就是不论你调用多少次,返回的都是同一个对象。
![image.png](https://img.haomeiwen.com/i27388007/01e6f0ca7dbd93d0.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
想在第一次挂载完拿useEffect里面的值,把它保存到组件里面,就可以用useRef定义一个值,设置current,以后在别的地方
![image.png](https://img.haomeiwen.com/i27388007/755b5a55ed87a4f3.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
就可以直接使用了。
```js
import React, { memo, useState, useRef } from "react";

let obj = null;
const App = memo(() => {
const [count, setCount] = useState(0);
const nameRef = {};
/* 如果定义一个对象,每次都是返回新的对象 */
const nameRef1 = useRef();
/* 这样的化,在整个声明周期里面,这个nameRef1始终都是同一个 */
console.log(obj === nameRef1);
obj = nameRef1;
return (
 <div>
   <h2>{count}</h2>
   <button onClick={(e) => setCount(count + 1)}>点我加一</button>
 </div>
);
});

export default App;
```
```js
import React, { memo, useState, useRef, useCallback } from "react";

let obj = null;
const App = memo(() => {
const [count, setCount] = useState(0);

const countRef = useRef();
countRef.current = count;
const increment = useCallback(() => {
 setCount(countRef.current + 1);
}, []);

console.log(increment === obj);
obj = increment;

return (
 <div>
   <h2>{count}</h2>
   <button
     onClick={(e) => {
       increment();
     }}
   >
     点我加一
   </button>
 </div>
);
});

export default App;

```


#总结:
1.绑定dom
2.使用ref保存上一次的某一个值(解决闭包陷阱)

相关文章

  • React Hooks系列之useRef

    一、useRef 是什么? const myRef = useRef(initialValue); useRef ...

  • React-03 Ref的演变

    stringRef: createRef: useRef: const curRef = useRef(); co...

  • useRef和createRef区别

    useRef和createRef区别 官网的定义如下:useRef returns a mutable ref o...

  • useRef、useImperativeHandle

    useRef可以直接获取dom元素 useRef结合useImperativeHandle可以通过父组件获取子组件...

  • useRef

    使用场景 1 .获取子组件的实例,只有类组件可以使用2 .在函数组件中定义一个全局变量,不会因为重复render重...

  • useRef

    1. 通过countRef.current解决capture value的现象 countRef.current可...

  • useRef

    useRef返回一个可变的 ref 对象,其.current属性被初始化为传入的参数(initialValue)。...

  • useRef

    先来看看官网如何解释: 你应该熟悉 ref 这一种访问 DOM的主要方式。如果你将 ref 对象以 形式传入组...

  • useRef

    useRef返回一个ref对象,这个helloWorld不论被执行多少次,这个ref返回的都是同一个对象。两种用法...

  • react hooks 之 useRef, useCallbac

    前言 useRef 可以通过 ref 获取 DOM 节点,其次它还有保存变量的特性。 useRef基础 写法use...

网友评论

      本文标题:useRef

      本文链接:https://www.haomeiwen.com/subject/xpvytdtx.html