有没有办法在 React 中访问组件的“this”子项?

Is there a way to access 'this' children of the component in React?

提问人:curiousRedReptile 提问时间:9/23/2022 更新时间:9/23/2022 访问量:27

问:

我正在使用类组件,我有一个主图片和一个来自数组的较小图片库。我为这些组件提供的结构是包含主图片和较小图片的所有图片容器,以及映射图库中的图片的较小图片容器(每张图片都是另一个组件)。 我想在所有图片组件中添加一个状态,用于处理主图片的更改,因此它将获取单击的小图片的索引并将其传输到主图片,因此它更改为单击的图片。 当我使用类组件时,我使用的是this.props,当我添加handleClick函数时,console.log(this.props)显示{productGal:Array(7)}。有什么方法可以获得“this”的点击子项?

我正在附加结构: 所有图片库

class ProductDetailPhotoGallery extends Component {
state ={
    imageSource: this.props.productGal[0]
} 

handlePictureChange = () => {
    console.log(this.props)
    this.setState({
    imageSource: this.props.productGal[3] //check if the picture changes
   })
}

render() {
    return (
        <ProductPhotoGalleryContainer>
            <ProductPageMiniatureImages 
            productGal={this.props.productGal}
            handlePictureChange={this.handlePictureChange}
            />
            <ProductPageDetailedImage 
            imageSrc={this.state.imageSource}
             />
        </ProductPhotoGalleryContainer>
    )
}

}

小图片容器

class ProductPageMiniatureImages extends Component {


render() {
    return (
        <ProductMiniatureImageContainer>
            {this.props.productGal.map((singlePrd, ind) => <ProductSmallImage 
            key={ind}
            id={ind}
            imageSrc={singlePrd} 
            imageAlt={'Product image'}
            handlePictureChange={this.props.handlePictureChange}
            />)}
        </ProductMiniatureImageContainer>
    )

小图片组件

class ProductSmallImage extends Component {

    render() {
        return (
            <>
                <SmallProductImage 
                onClick={this.props.handlePictureChange}
                src={this.props.imageSrc}
                alt={this.props.imageAlt}
                id={this.props.id}               
                />
            </>

        )
    }
}
javascript reactjs 这个

评论


答:

0赞 Nir Alfasi 9/23/2022 #1

简短的回答是“不”。

更长的解释: React 方法是单向数据流:从父级到子级,而不是相反。此方法使应用程序的代码更易于理解和维护。

有几种方法可以在不同组件之间传递状态,最简单的方法是在第一个“父级”中创建状态,该父级高于层次结构树中所有相关子级,例如,如果我们希望从节点 1、6 和 7 访问状态 - 我们应该在 3 处创建它:

enter image description here

使用钩子并将其传递给相关的孩子。useState

还有其他方法可以传递上下文,例如 hook 和 react-redux。useContext