这是我的反应钩子代码:
function Simple(){
var [st,set_st]=React.useState(0)
var el=React.useRef(null)
if (st<1)
set_st(st+1)//to force an extra render for a grand total of 2
console.log('el.current',el.current,'st',st)
return <div ref={el}>simple</div>
}
ReactDOM.render(<Simple />,document.querySelector('#root') );
我认为它应该渲染两次。第一次 el.current 应该为空,第二次应该指向 div 的 DOM 对象。运行时,这是输出
el.current null st 0
el.current null st 1
是的,它确实渲染了两次。但是,第二次渲染 el.current 仍然为空。为什么?
解决方案:如下 Gireesh Kudipudi 所述。我添加了 useEffect
function Simple(){
var [st,set_st]=React.useState(0)
var el=React.useRef(null)
if (st<1)
set_st(st+1)//to force an extra render for a grand total of 2
console.log('el.current',el.current,'st',st)
React.useEffect(_=>console.log('el.current',el.current,'st',st)) //this prints out the el.current correctly
return <div ref={el}>simple</div>
}
ReactDOM.render(<Simple />,document.querySelector('#root') );