【发布时间】:2020-06-26 14:43:26
【问题描述】:
如果我以正确的方式使用useRef([]);,我仍然感到困惑,因为itemsRef 返回Object {current: Array[0]}。在这里行动:https://codesandbox.io/s/zealous-platform-95qim?file=/src/App.js:0-1157
import React, { useRef } from "react";
import "./styles.css";
export default function App() {
const items = [
{
id: "asdf2",
city: "Berlin",
condition: [
{
id: "AF8Qgpj",
weather: "Sun",
activity: "Outside"
}
]
},
{
id: "zfsfj",
city: "London",
condition: [
{
id: "zR8Qgpj",
weather: "Rain",
activity: "Inside"
}
]
}
];
const itemsRef = useRef([]);
// Object {current: Array[0]}
// Why? Isn't it supposed to be filled with my refs (condition.id)
console.log(itemsRef);
return (
<>
{items.map(cities => (
<div key={cities.id}>
<b>{cities.city}</b>
<br />
{cities.condition.map(condition => (
<div
key={condition.id}
ref={el => (itemsRef.current[condition.id] = el)}
>
Weather: {condition.weather}
<br />
Activity: {condition.activity}
</div>
))}
<br />
<br />
</div>
))}
</>
);
}
在原始示例中,当我 console.log(itemsRef); 时收到 // Object {current: Array[3]} 不同之处在于我在我的版本中使用 itemsRef.current[condition.id] 作为它的嵌套映射循环,因此 i 不起作用。
import React, { useRef } from "react";
import "./styles.css";
export default function App() {
const items = ["sun", "flower", "house"];
const itemsRef = useRef([]);
// Object {current: Array[3]}
console.log(itemsRef);
return items.map((item, i) => (
<div key={i} ref={el => (itemsRef.current[i] = el)}>
{item}
</div>
));
}
【问题讨论】:
-
那肯定不是正确的方法,你的最终目标是什么?您可能想为天气活动创建一个功能组件,将该组件与条件映射为道具,在该组件内使用
useRef来引用div
标签: javascript reactjs react-hooks use-ref