私はreact
とmobx
を使って簡単なイベントアプリを作成しています。今度はjson
オブジェクトを持っています。オブジェクトには、それぞれ独自のキー(この場合はキーは月です)を持つ一連の配列が含まれています。何らかの理由でビューに表示できません。ここでReact MobXオブジェクト内の配列のキーを表示する方法
は私json
-dataの例である: - :
import { observable, action, async } from "mobx"
export default class EventState {
@observable events= [];
constructor() {
this.getEvents()
}
@action async getEvents() {
await fetch('/api/events').then(response => {
if(response.ok){
response.json().then(data => {
this.events.slice(0, this.events.length)
let actualEvents = {};
let months = 'January February March April May June July August September October November December'.split(' ');
data.forEach(event => {
let date = new Date(event.release_date);
let month = date.getMonth();
let monthName = months[month]
if (!(monthName in actualEvents)) {
actualEvents [monthName] = [];
}
actualEvents [monthName].push(event);
});
this.events = actualEvents;
});
}
else{
// error
}
});
}
}
const eventState = new EventState();
{
"events": {
"November": [{
"event_name": "some-event",
"event_date": "2017-11-05"
},
{
"event_name": "some-other-event",
"event_date": "2017-11-12"
}
],
"December": [{
"event_name": "some-event",
"event_date": "2017-12-05"
},
{
"event_name": "some-other-event",
"event_date": "2017-12-12"
}
]
}
}
私はmobx
を使用していますので、私はビューと状態のファイルを分割し、ここで私の現在の状態ファイルです
次に、私のビューでイベントを表示しようとしましたが、今は何も表示されません。
import React from "react";
import { observer } from "mobx-react";
import moment from "moment";
import 'moment/locale/de';
import '../../css/main.scss';
import EventState from "./event-state";
@observer
export default class Events extends React.Component {
constructor() {
super();
this.state = new EventState();
}
render() {
return (
<div>
<Events state={this.state} events={this.state.events} />
</div>
)
}
}
const Events = observer(({ state, event, events }) => (
<div className="wrapper">
{state.events.map((event, i) => <Eventdetails state={state} event={event} key={i}/>)}
</div>
))
const Eventdetails = observer(({ state, event }) => (
<div>
// EVENT MONTH HERE?
<p>{event.name} {moment(event.event_date).format('LL')}</p>
</div>
))
誰かが私がここで間違っていることを教えてもらえますか?
基本的に、私が達成したいことは、このような表示です:
November
- some event 5. November
- some other event 12. November
December
- some event 5. December
- some other event 12. December
任意のヘルプや提案は非常にあなたが使用できるオブジェクトからプロパティ名を取得するには
任意のアイデア:あなたは約束を処理している場合
あなたはまた
async/await
を使用する必要はありません:あなたが参照を失うことはありませんので、代わりにreplaceを使用してみてくださいビューで? – Steve