Вопрос о React 16 от новичка.
Реакция v16. Я делаю map () над задачами. Каждая задача имеет свой собственный компонент таймера.
Родитель:
render(props)
{
return (
this.props.tasks.tasks.map((task, id) = >
{
return (
<div key={id} className="task" data-id={task.id}>
<div className="task-description">{ task.task }</div>
<Timer
onRemove={this.props.onRemove}
whereToEdit={this.props.whereToEdit}
id={task.id}
handleTimer={this.handleTimer}
/>
</div>
)
}
)
)
}
Каждый созданный таймер имеет свое собственное состояние со значением мс.
Когда я запускаю другой таймер или удаляю задачу, предыдущий компонент таймера должен вызывать свой собственный Stop () метод.
Скриншот:
Скриншот этого контекста для каждого сгенерированного экземпляра:
Я пытался контролировать каждый экземпляр от родителя и держать миллисекунды в родительском, но он запускает все таймеры одновременно. Также я пытался использовать Mobx , но я сдался, так как я не уверен, смогу ли я сделать это с этим шаблоном.
Мне нужен совет, как вызывать метод stop () внутри этого компонента Timer
UPD: я наконец решил это с помощью ссылок.
Идентификатор задачи генерируется библиотекой unique-html, поэтому в Parent я добавил это в
onRef={ref => (this[`example${task.id}`] = ref)}
и вызовите этот метод в Parent от child:
start (thisId) {
if (this.state.runningId !== thisId && this.state.runningId !== "") {
this[`example${this.state.runningId}`].stop(thisId);
}
this.setState({runningId: thisId});
}
Но появился новый - теперь, когда я запускаю таймер 3 и удаляю 2-е задание - дочернее состояние переходит к следующему экземпляру. Таким образом, таймер применяется к неправильной задаче после удаления.