Я новичок в реакции, я пытаюсь написать компонент реакции, компонент имеет несколько функций.
- пользователь может ввести случайное число, тогда число будет отображаться и на странице.
- реализовать кнопку с текстовым значением 'start', после нажатия кнопки отображаемое числовое значение будет уменьшаться на единицу каждую секунду, а текстовое значение станет 'stop'.
- продолжить нажмите кнопку, минус одна остановится, и текстовое значение кнопки вернется к «пуску».
- , когда число, вычитаемое в 0, автоматически остановится.
Я реализовал первую и вторую функцию. но когда я пытаюсь нажать Стоп, чтобы число не уменьшалось до 1, это не работает.
Мне интересно, поскольку я использовал type=true/false
, чтобы указать, что состояние типа - начало или остановка. Потому что в начальном состоянии число должно автоматически уменьшаться на 1. А в состоянии останова уменьшение на 1 должно останавливаться. Таким образом, функция таймера должна быть точной в зависимости от состояния типа.
Также я не уверен, правильно ли я использовал clearInterval
метод.
Я действительно ценю, если кто-то может мне помочь.
код здесь:
class App extends Component {
constructor(props) {
super(props);
this.state = {
details: [{ id: 1, number: "" }],
type: false
};
this.handleClick = this.handleClick.bind(this);
}
changeNumber = (e, target) => {
this.setState({
details: this.state.details.map(detail => {
if (detail.id === target.id) {
detail.number = e.target.value;
}
return detail;
})
});
};
handleClick = () => {
this.setState(prevState => ({
type: !prevState.type
}));
if (this.state.type === false) {
var myTimer = setInterval(
() =>
this.setState({
details: this.state.details.map(detail => {
if (detail.id) {
detail.number = parseInt(detail.number) - 1;
}
return detail;
})
}),
1000
);
} else if (this.state.type === true) {
clearInterval(myTimer);
}
};
render() {
return (
<div>
{this.state.details.map(detail => {
return (
<div key={detail.id}>
Number:{detail.number}
<input
type="number"
onChange={e => this.changeNumber(e, detail)}
value={detail.number}
/>
<input
type="button"
onClick={() => this.handleClick()}
value={this.state.type ? "stop" : "start"}
/>
</div>
);
})}
</div>
);
}
}
export default App;