class App extends React.Component{
constructor(){
super();
this.iptRef = React.createRef();
this.handleSubmit = this.handleSubmit.bind(this);
handleSubmit(event){
console.log(this.iptRef.current.value);
event.preventDefault();
render(){
return (
<form onSubmit={this.handleSubmit}>
<input type="text" defaultValue="" ref={this.iptRef} />
<input type="submit" value="提交" />
</form>
一般会使用 ref 获取 DOM 元素。例如:constructor(){ super(); // 创建 ref this.divRef = React.createRef();}componentDidMount(){ // DOM 元素可以通过 current 属性获得 console.log(this.divRef.current);}render(){ // 使用 ref return <div ref={this.divRef
Ref 是 Reference 的缩写,就是引用的意思class 组件使用 createRef 创建 Ref 实例:
function 组件使用 useRef HOOK 声明 Ref:
Ref 与 render
ref.current 发生变化不会造成 re-render不应该在 render 阶段更新 ref.current 属性,ref.current 发生变化应该作为 Side Effect(影响下次渲染)Reactjs 并不会跟踪 ref.current 的变化,不要把 ref.current 作为
使用 useEffect 添加 ref 作为依赖项会监听不到变化的原因是,在依赖项列表中的每个项目都会被浅比较,并且如果发现有任何项目发生变化,就会重新运行 effect。然而,对于 ref 类型的变量,每次浅比较的结果都是相同的,因为它们的引用地址始终相同。因此,即使 ref 指向的变量值发生了变化,也不会在依赖项列表中触发更新。
为了解决这个问题,可以使用 useRef 来跟踪 ref 指向的...
🤔 如何用useEffect模拟componentDidMount生命周期?
🤔 如何正确地在useEffect里请求数据?[]又是什么?
🤔 我应该把函数当做effect的依赖吗?
🤔 为什么有时候会出现无限重复请求的问题?
🤔 为什么有时候在effect里拿到的是旧的state或prop?
目录一、useEffect副作用 (1)使用useEffect(2)执行时机(第二个参数)(3)倒计时demo(4)请求ajax(5)useEffect的清理函数(6)图片移动demo(7)图片移动demo 封装二、 useRef(引用)(1)使用方法(2)demo 获取input的值(3)demo 清除定时器(4)demo 验证码倒计时(5)demo 验证码倒计时 抽离hooks三、useContext(跨组件传值)一、使用方法二、传值Demo
(2)执行时机(第二个参数)
情况一:不写第二个参数
{/* 方式一 */}
<div ref="div"></div>
<button className="btn btn-primary" onClick={()=>this.send()}>操作DOM元素</button>
send(){
// console.log(this.refs.div);
this.refs.div.