Каждый раз при изменении входного значения componentDidMount запускается, и вы сбрасываете состояние до начального значения в componentDidUpdate
.
componentDidUpdate(prevProps) {
this.props.selectedEvt &&
this.setState({
event: this.props.selectedEvt // Here is the problem
});
}
Также Вы меняете состояние при изменении входа. И поскольку его чистый компонент не будет обновляться.
Изменить onInputChange
на
onInputChange = evt => {
let name = evt.target.name;
let value = evt.target.value;
let newEvent = {...this.state.event};
newEvent[name] = value
this.setState({event: newEvent});
}
Это - идеальный кандидат на закрытия:
setInterval(
function ()
{
var myVar = document.getElementById("givenID");
setTimeout(
function()
{
// myVar is available because the inner closure
// gets the outer closures scope
myVar.innerHTML = "Junk";
},2000);
}, 10000);
Вашей проблемой является объем, связанный, и это работало бы вокруг этого.
Как лучшую практику, попытайтесь не использовать строки в качестве параметров к setTimeout
и setInterval
потому что это вызовет eval
... Используя следующую форму мог бы также сделать эту проблему легче понять/отладить:
setInterval(function () {
// do stuff
// ...
// now wait 2 secs then call someFunction
setTimeout(someFunction, 2000);
}, 10000);
Выполните его в Firefox и проверьте Инструменты | Ошибочная Консоль. если сбои setTimeout это может сказать Вам почему там.
Кроме того, попытайтесь заменить "someFunction();"
с "alert('hi')"
(никакая точка с запятой), и видят, работает ли это. Если так, проблема значительно сужена.