当前位置: 首页 > 知识库问答 >
问题:

无法从子组件内的父组件获取道具

满才
2023-03-14

我有一个父组件从API获取一些数据,并将数据存储在状态中,然后将其传递给子组件,如下所示:

export default class TourDetailsPage extends Component {
    constructor(props){
        super(props);
        this.state = {
            tour: ''
        };
      }

    componentDidMount = async () => {
        const name = this.props.match.params.name.replace(/-/g, ' ');
        const res = await fetch(`http://127.0.0.1:8000/api/v1/tours?name=${name}`);
        const tour = await res.json();
        this.setState({tour: tour.data.docs[0]});
    }

    render() {
        return (
            <Fragment>
                <Container style={{width:'90%'}}>
                    <Grid>
                        <Grid.Row>
                            <Grid.Column width={16} textAlign={"center"}>
                                <TourDetailsHeader
                                    tour={this.state.tour}
                                />
                            </Grid.Column>
                        </Grid.Row>
                    </Grid>
                </Container>
            </Fragment>
        )
    }
}

在我的子组件中,我有两个问题,一个是:我想在componentDidMount中接收一个道具(ratingsAverage),但在render()函数中接收ratingsAverage时未定义。另一个是:在我的render()函数中,我只能接收非对象或数组的数据,当我接收到一个对象并希望访问该对象的属性时,它会给我一个错误,即无法读取未定义的属性。我的子组件代码:在子组件中,“startLocation”是来自父组件的对象,而我无法访问它的属性。

class TourDetailsHeader extends Component{
    constructor(props){
        super(props);
        this.state = {
            value: 0
        };
      }

    componentDidMount = () => {
        const { ratingsAverage } = this.props.tour;
        console.log(ratingsAverage); // output undefined

    }

    render() {
        console.log(this.props.tour);
        const {name, imageCover, ratingsAverage, duration, startLocation} = this.props.tour;
        return(
            <Fragment>
            <Segment.Group>
                <Segment basic attached="top" style={{ padding: '0' }}>
                    <Image src={`/tours/${imageCover}`} style={eventImageStyle} />
                    <Segment basic style={eventImageTextStyle}>
                        <Item.Group>
                            <Item>
                                <Item.Content>

                                    <Item.Description style={{marginTop: '3%'}}>
                                        <Grid>
                                            <Grid.Column width={5}>
                                                <Icon name='plane' size={'big'} color={'green'}/>
                                                {startLocation.description}
                                            </Grid.Column>
                                        </Grid>
                                    </Item.Description>
                                </Item.Content>
                            </Item>
                            <Item>

                            </Item>
                        </Item.Group>
                    </Segment>
                </Segment>
            </Segment.Group>
        </Fragment>
        )
    }
}

如果有人能帮我,我将不胜感激!

共有1个答案

姚昊焱
2023-03-14

为什么在子组件中使用未定义的值获得分级存储空间?在React中,组件的生命周期是初始化构造函数-

js lang-js prettyprint-override">class TourDetailsHeader extends Component{
    ...
    componentDidUpdate() {
        const { ratingsAverage } = this.props.tour;
        console.log(ratingsAverage);
    }

    render() {
        console.log(this.props.tour);
        const {name, imageCover, ratingsAverage, duration, startLocation} = this.props.tour;
        return(
            ...
              <Grid.Column width={5}>
                  <Icon name='plane' size={'big'} color={'green'}/>
                  {startLocation && startLocation.description}
              </Grid.Column>
            ...
        )
    }
}

 类似资料:
  • 我有一个在父组件中生成的事件,子组件必须对此作出反应。我知道在中不建议使用这种方法,我必须执行emit,这非常糟糕。所以我的代码是这个。 正如您所看到的,在无限滚动上被触发,事件被发送到子组件搜索。不仅仅是搜索,因为它是根,所以它正在向每个人广播。 什么是更好的方法。我知道我应该使用道具,但我不知道在这种情况下我该怎么做。

  • 我有一个父组件[MainLayout],它有一个子组件[ListItems],并且有多个子组件[ListItem]。 谢谢你的回答!

  • 如何在孩子的标签和函数sayhello中访问家长的道具? (我可以访问兄弟姐妹和孩子,而无需将道具作为参数传递,但不能访问家长) \uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu 和(远离本例) 如果此代码引用了 如何访问家长的道具 如果将Chi

  • 如何在Children内部拿到父级的ref? 父级是不同的组件

  • 从子组件对父组件执行setState的建议模式是什么? 我有一个todo项数组,它在父级状态下维护。我想从的组件访问父级状态并添加新的todo项。我的想法是在父对象上执行setState,这将呈现新添加的todo项。

  • 我正在使用react路由器dom v5。反应v16中的2.0。13.1项目中,我使用静态路由将道具从父组件传递到子组件,父组件从其父组件(即祖父)接收道具。从应用程序。js-