据我的理解,我可以像这样为单个元素使用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()
,为什么您希望元素具有不同的引用呢?据我所知,React 使用引用作为迭代元素的标识符,因此当您使用相同的引用时,它无法区分它们之间的差异。 - MTCoster[1,2,3]
。然而,你绝不能假设真实世界中的使用情况就像这么简单,应该谨慎地考虑输入数据可能比简化示例复杂得多。例如,数组可能是动态的,长度可能会变化;它可能作为JSON从服务器传输过来;它可能包含不同类型的元素等等。你可以编写与简单示例相似的答案,但你的解决方案必须能够合理地扩展到更复杂的输入情况。 - ADTC