Не могу понять логику отрисовки элемента в данном контексте:
Попытка TODO-List.
Я вписываю какой-то таск в инпут, добавляю его.
В этот таск рендерится элемент Clock, который возвращает дату и время на текущий момент.
Далее я вписываю следующий таск, добавляю его и React рендерит в него дату и время предыдущего таска, а предыдущему даёт новое значение... Почему так?
Соответственно и удаляет он нужный таск, но дату и время берёт только с конца. Почему элемент даты и время Clock не связывается с таском, в котором он был вызван, как пофиксить?
import React from 'react';
class Clock extends React.Component {
constructor(props) {
super(props);
this.state = {
date: new Date(),
};
}
render() {
const { date } = this.state;
return (
<div>
{date.toLocaleDateString()}, ({date.toLocaleTimeString()})
</div>
);
}
}
export default Clock;
function ListItem({ itemName, onRemove }) {
return (
<>
<div className="item">
<div className="time__div">
<Clock />
</div>
<div className="item__text">{itemName}</div>
<div className="tools">
<Checked key={itemName} />
<Button
name="X"
onClick={() => onRemove(itemName)}
customClass="item__remove__btn"
/>
</div>
</div>
</>
);
}
export default ListItem;
ниже код самого App.js
class App extends React.Component {
constructor() {
super();
this.state = {
key: 0,
inputValue: '',
todoList: [],
};
}
onChangeInputValue = (event) => {
this.setState({
inputValue: event.target.value,
});
};
onClickBtn = () => {
const { inputValue, todoList } = this.state;
this.setState({
todoList: [inputValue, ...todoList],
inputValue: '',
});
};
onRemoveitem = (todoName) => {
const { todoList } = this.state;
const todoIndex = todoList.findIndex((str) => str === todoName);
const newTodoList = [
...todoList.slice(0, todoIndex),
...todoList.slice(todoIndex + 1),
];
this.setState({
todoList: newTodoList,
});
};
render() {
const { inputValue, todoList } = this.state;
return (
<>
<div className="input__button">
<Input value={inputValue} onChange={this.onChangeInputValue} />
<Button name="Add" onClick={this.onClickBtn} />
</div>
{todoList.map((itemString) => {
return (
<>
<ListItem
key={this.key}
itemName={itemString}
onRemove={this.onRemoveitem}
/>
</>
);
})}
</>
);
}
}
export default App;