Xen*_*mar 8 reactjs react-hooks
我有一个简单的组件示例:
function App() {
const observed = useRef(null);
console.log(observed.current);
return (
<div ref={observed} className="App">
<h1>Hello CodeSandbox</h1>
<h2>Start editing to see some magic happen!</h2>
</div>
);
}
const rootElement = document.getElementById("root");
ReactDOM.render(<App />, rootElement);
Run Code Online (Sandbox Code Playgroud)
我希望它observed.current的类型为element,而current不会为空,而是具有所有属性的div元素。我的理解是:
但事实证明,.current仍然是空的。这很不好,因为我想将观察值传递给需要Element类型参数的函数。
小智 15
在console.log发生时,ref尚未设置。尝试将您console.log的useEffect钩子放入钩子中,它会按您的意愿工作。
import React, { useRef, useEffect } from "react";
import ReactDOM from "react-dom";
import "./styles.css";
function App() {
const observed = useRef(null);
useEffect(() => {
console.log(observed.current);
}, [observed]);
return (
<div ref={observed} className="App">
<h1>Hello CodeSandbox</h1>
<h2>Start editing to see some magic happen!</h2>
</div>
);
}
const rootElement = document.getElementById("root");
ReactDOM.render(<App />, rootElement);
Run Code Online (Sandbox Code Playgroud)
Ref.current为null,因为直到函数返回并呈现内容后才设置ref。所述useEffect钩触发间隔的阵列的内容的值传递给它的变化的时间。通过传入observed数组并传递记录observed到控制台的回调,可以利用useEffect挂钩完成任务。
useEffect(() => {
console.log(observed.current);
}, [observed]);
Run Code Online (Sandbox Code Playgroud)
这是我最后呼吁以来做useEffect的rlvRef没有捕获所有事件。
const rlvRef = useRef()
const [refVisible, setRefVisible] = useState(false)
useEffect(() => {
if (!refVisible) {
return
}
// detected rendering
}, refVisible)
return (
<RecyclerListView
ref={el => { rlvRef.current = el; setRefVisible(!!el); }}
...
/>
)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6031 次 |
| 最近记录: |