React Ref:对象数组的 Ref 函数仅记录第一项
React Ref: Ref function for an array of objects only logs 1st item
我映射了来自外部 API 的对象数组,成功显示了它们的内容。我现在正尝试通过 React ref 访问他们各自的 clientHeights,但当我登录到我的控制台时,它似乎只输出第一个项目:
class ImageList extends React.Component{
constructor(props){
super(props)
this.imageRef = React.createRef()
}
componentDidMount(){
console.log(this.imageRef)
}
render(){
const images= this.props.images.map((image)=>{
return(
<img ref={this.imageRef}
key={image.id}
src={image.urls.regular}
alt={image.description} />
)})
return(
<div className="image-list" >
{images}
</div>
)
}
}
我正在尝试获取他们所有的 clientHeights 而不仅仅是第一个。谢谢
您的代码会将每个 img 节点分配给 this.imageRef
。我不确定为什么要保留第一个参考,但无论哪种方式,它都不会像您期望的那样工作。要获取 img 节点数组,您需要将 ref 设为数组并将每个节点添加到其中。 ref
prop 可以是一个函数,所以试试这样的东西
class ImageList extends React.Component{
constructor(props){
super(props)
}
componentDidMount(){
console.log(this.imageRefs)
}
render(){
this.imageRefs = []
const images= this.props.images.map((image)=>{
return(
<img ref={ref => {this.imageRefs.push(ref)}}
key={image.id}
src={image.urls.regular}
alt={image.description} />
)})
return(
<div className="image-list" >
{images}
</div>
)
}
}
我得到的另一种方法(从教程中得到)是将图像及其内容显示为另一个组件(将其称为 ImageCard- 我现在放置参考的位置)然后显示该组件代替原始 <img/>
标签,如下所示:
class ImageList extends React.Component{
render(){
const images= this.props.images.map((image)=>{
return(
<ImageCard key={image.id} image= {image}/>
)})
console.log(images);
return(
<div className="image-list" >
{images}
</div>
)
}
}
这使得对 ImageCard 组件所做的任何操作也得到映射。
顺便说一句,我现在刚看完这个
我映射了来自外部 API 的对象数组,成功显示了它们的内容。我现在正尝试通过 React ref 访问他们各自的 clientHeights,但当我登录到我的控制台时,它似乎只输出第一个项目:
class ImageList extends React.Component{
constructor(props){
super(props)
this.imageRef = React.createRef()
}
componentDidMount(){
console.log(this.imageRef)
}
render(){
const images= this.props.images.map((image)=>{
return(
<img ref={this.imageRef}
key={image.id}
src={image.urls.regular}
alt={image.description} />
)})
return(
<div className="image-list" >
{images}
</div>
)
}
}
我正在尝试获取他们所有的 clientHeights 而不仅仅是第一个。谢谢
您的代码会将每个 img 节点分配给 this.imageRef
。我不确定为什么要保留第一个参考,但无论哪种方式,它都不会像您期望的那样工作。要获取 img 节点数组,您需要将 ref 设为数组并将每个节点添加到其中。 ref
prop 可以是一个函数,所以试试这样的东西
class ImageList extends React.Component{
constructor(props){
super(props)
}
componentDidMount(){
console.log(this.imageRefs)
}
render(){
this.imageRefs = []
const images= this.props.images.map((image)=>{
return(
<img ref={ref => {this.imageRefs.push(ref)}}
key={image.id}
src={image.urls.regular}
alt={image.description} />
)})
return(
<div className="image-list" >
{images}
</div>
)
}
}
我得到的另一种方法(从教程中得到)是将图像及其内容显示为另一个组件(将其称为 ImageCard- 我现在放置参考的位置)然后显示该组件代替原始 <img/>
标签,如下所示:
class ImageList extends React.Component{
render(){
const images= this.props.images.map((image)=>{
return(
<ImageCard key={image.id} image= {image}/>
)})
console.log(images);
return(
<div className="image-list" >
{images}
</div>
)
}
}
这使得对 ImageCard 组件所做的任何操作也得到映射。 顺便说一句,我现在刚看完这个