【发布时间】:2019-07-05 03:10:27
【问题描述】:
据我了解,我可以将 refs 用于这样的单个元素:
const { useRef, useState, useEffect } = React;
const App = () => {
const elRef = useRef();
const [elWidth, setElWidth] = useState();
useEffect(() => {
setElWidth(elRef.current.offsetWidth);
}, []);
return (
<div>
<div ref={elRef} style={{ width: "100px" }}>
Width is: {elWidth}
</div>
</div>
);
};
ReactDOM.render(
<App />,
document.getElementById("root")
);
<script src="https://unpkg.com/react@16/umd/react.production.min.js"></script>
<script src="https://unpkg.com/react-dom@16/umd/react-dom.production.min.js"></script>
<div id="root"></div>
如何为元素数组实现此功能?显然不是那样的:(即使我没有尝试我也知道:)
const { useRef, useState, useEffect } = React;
const App = () => {
const elRef = useRef();
const [elWidth, setElWidth] = useState();
useEffect(() => {
setElWidth(elRef.current.offsetWidth);
}, []);
return (
<div>
{[1, 2, 3].map(el => (
<div ref={elRef} style={{ width: `${el * 100}px` }}>
Width is: {elWidth}
</div>
))}
</div>
);
};
ReactDOM.render(
<App />,
document.getElementById("root")
);
<script src="https://unpkg.com/react@16/umd/react.production.min.js"></script>
<script src="https://unpkg.com/react-dom@16/umd/react-dom.production.min.js"></script>
<div id="root"></div>
【问题讨论】:
-
如果这是无知的,请原谅我,但如果你只调用一次
useRef(),你为什么期望元素有不同的引用? AFAIK,React 使用 ref 作为迭代元素的标识符,所以当你使用相同的 ref 时它不知道它们之间的区别 -
这里没有无知,因为我还在学习 hooks 和 refs。所以任何建议对我来说都是很好的建议。这就是我想做的,为不同的元素动态创建不同的参考。我的第二个例子只是“不要使用这个”例子:)
-
[1,2,3] 是从哪里来的?是静态的吗?答案取决于它。
-
最终,它们将来自远程端点。但是现在,如果我学会了静态的,我会很高兴的。如果你能解释偏远的情况,那就太棒了。谢谢。
标签: javascript reactjs react-hooks