this.items
- это просто свойство компонента Home. Изменение этого параметра не приведет к повторной визуализации компонента Home или компонента TimeDisplay, которому вы передаете его. Вы также должны деструктурировать ваши реквизиты, полученные в TimeDisplay.
Итак, во-первых, вы должны использовать состояние; в своем конструкторе вы могли бы написать что-то вроде:
import React, { Component } from 'react';
import { TimeSubmitter } from './TimeSubmitter';
import { TimeDisplay, TimeEntry } from './TimeDisplay';
type HomeProps = {};
export class Home extends Component<HomeProps> {
static displayName = Home.name;
private items: TimeEntry[] = new Array<TimeEntry>();
constructor(props: HomeProps) {
super(props);
// set initial state with your object inside the items array
this.state = {
items: [
{
client: 'Apple',
hours: 1,
timeCode: 'MD',
loggedDate: new Date()
}
]
};
}
render() {
// change this.items to this.state.items
return (
<div>
<TimeDisplay title='Time Logged this Period' items={this.state.items} />
</div>
);
}
}
А затем в TimeDisplay вы должны написать ({title, itemsArray})
вместо (title, itemsArray)
, поскольку реквизиты передаются как один объект.
I также заметил некоторые другие вещи в вашем коде, к которым вы можете обратиться:
HomeProps
, TimeDisplayProps
и TimeEntry
должны быть interface
s, а не типами. Просто измените тип на интерфейс и удалите знак равенства.
Кроме того, более аккуратный способ написать это ...
for (let index = 0; index < items.length; index++) {
const element = items[index];
if(!hashSet.has(element.client)){
groups.push({
key: element.client,
name: element.client,
startIndex: 0,
count: 10
});
hashSet.add(element.client);
}
}
return groups;
}
Было бы использовать метод forEach в вашем массиве, например. ..
items.forEach(element => {
if (!hashSet.has(element.client)) {
groups.push({
key: element.client,
name: element.client,
startIndex: 0,
count: 10
});
hashSet.add(element.client);
}
return groups;
});
Надеюсь, все это имеет смысл!