gpt4 book ai didi

reactjs - componentDidMount 中未定义的 Prop

转载 作者:行者123 更新时间:2023-12-05 05:12:18 26 4
gpt4 key购买 nike

这开始变得非常令人沮丧。基本上,我无法在我的子组件中访问 props。如果我尝试使用 this.props 直接渲染它们 - 它可以工作,但如果我需要对它们进行额外的处理,或者将它们保存到 state 中,我会得到未定义的 Prop 每时每刻。我有一个父组件,它看起来像这样:

import React from 'react';

import Title from './EventSubComponents/Title';
import SessionInfo from './EventSubComponents/SessionInfo';
import SessionTime from './EventSubComponents/SessionTime';
import Location from './EventSubComponents/Location';
import Subscribers from './EventSubComponents/Subscribers';

class EventNode extends React.Component {

constructor(props) {
super(props);
this.state = {
'event': [],
}
}

componentDidMount() {
this.getEvent(this.props.location.selectedEventId);
}

getEvent(eventId) {
fetch('/api/v.1.0/event/' + eventId, {mode: 'no-cors'})
.then(function(response) {
if(!response.ok) {
console.log('Failed to get single event.');
return;
}
return response.json();
})
.then((data) => {
if (!data) {
return;
}
this.setState({
'event': data
})
});
}

render() {
return(
<div className="event-wrapper">
<Title
title = { this.state.event.title }
date = { this.state.event.start }
/>
<SessionInfo
distance = { this.state.event.distance }
type = { this.state.event.type }
/>
<SessionTime
start = { this.state.event.start }
end = { this.state.event.end }
/>
<Location location = { this.state.event.start_location }/>
<Subscribers
subscribers = { this.state.event.subscribers }
eventId = { this.state.event._id }
/>
</div>
);
}
}

export default EventNode;

还有我的子组件SessionTime,它看起来像这样:

import React from 'react';
import moment from 'moment';

class Title extends React.Component {
constructor(props) {
super(props);
this.state = {
'title': '',
'date': '',
}
}

componentDidMount() {
console.log(this.props.title);
console.log(this.props.date);
// undefined both props.
this.convertToTitleDate(this.props.date);
this.setState({
'title': this.props.title
})
}

convertToTitleDate(date) {
var newDate = moment(date).format('dddd, Do MMMM')
this.setState({
'date': newDate,
});
}

render() {
return (
<div className="event-title-wrapper">
<h1> { this.state.title } </h1>
<div className="event-title-date"> { this.state.date } </div>
</div>
);
}
}

export default Title;

谁能解释一下,为什么 this.props.datethis.props.title 在我的 componentDidMount 函数中都未定义?我的 EventNode 中有更多组件,它们也有同样的问题。

componentDidMount 更改为 componentWillMount 没有帮助。我相当确定我的父 EventNode 组件有问题,但我不知道在哪里。在 EventNode render() 中定义了所有状态变量。

最佳答案

你初始化event到一个空数组并向下传递 this.state.event.startthis.state.event.endSessionTime , 两者都是 undefinedevent 以来首次呈现尚未加载,没有 startend数组上的属性。

您可以改为例如设置 eventnull最初,并返回 null从渲染方法直到 event已加载。

示例

class EventNode extends React.Component {
state = {
event: null
};

// ...

render() {
const { event } = this.state;

if (event === null) {
return null;
}

return (
<div className="event-wrapper">
<Title title={event.title} date={event.start} />
<SessionInfo distance={event.distance} type={event.type} />
<SessionTime start={event.start} end={event.end} />
<Location location={event.start_location} />
<Subscribers
subscribers={event.subscribers}
eventId={this.state.event._id}
/>
</div>
);
}
}

关于reactjs - componentDidMount 中未定义的 Prop ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54734480/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com