我有一个父组件从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>
)
}
}
如果有人能帮我,我将不胜感激!
为什么在子组件中使用未定义的
值获得
分级存储空间
?在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-