本文共 1837 字,大约阅读时间需要 6 分钟。
需求:通过useEffect获取到监听值的旧值与新值
import React,{ useState} from 'react'; function Child(props){ let [txt,setTxt] = useState("1"); return { setTxt(target.value) }} /> } export default Child
import React,{ useState,useRef} from 'react';function Child(props){ let [txt,setTxt] = useState("1"); let txtRef = useRef(txt); useEffect(()=>{ console.log(txtRef.current,txt); txtRef.current = txt; },[txt]); return { setTxt(target.value) }} />}export default Child
import React,{ useState,useEffect,useRef} from 'react';function Child(props){ let [txt,setTxt] = useState("1"); let txtRef = useRef(txt); useEffect(()=>{ console.log(txtRef.current,txt); },[txt]); return { setTxt(target.value) }} />}export default Child
浏览器反馈
txt
,也就是我们的新值
出现后,我们的txtRef.current
也就是老值
是不会发生改变的 浏览器反馈 老值是上一个新值
,新值是修改后的值
...useEffect(()=>{ console.log(txtRef.current,txt); txtRef.current = txt;},[txt]);...
浏览器反馈
在自定义Hooks中还有一条规则,就是定义时,名字必须以use开头
案例
//自定义hooks组件import React,{ useState} from 'react';function useTitle(title){ return document.title = title}export { useTitle};// 显示页面import React,{ useState} from 'react';import { useTitle} from './hooks'function App(){ let [tit,setTit] = useState('App'); useTitle(tit) return { setTit(target.value) target.value = '' }} />}export default App;
转载地址:http://hlwiz.baihongyu.com/