私は非常に混乱している仕事があり、私はあなたの助けが必要です。 すべてのタスクにタイマーを設定してtodosを作成する必要があります。ユーザーは自分のタスクを作成することができます - >タイマーを開始 - >タイマーを停止 - >タスクを閉じます。すべてのタスクには、ボタンの開始と停止があります。無効になっているボタン
問題は、ONLY ONEタイマーは同時に動作できないという問題です。したがって、1つのタイマーでも「スタート」ボタンを無効にする必要があります。 私はhandleStartClickの近くの決定(値のボタンを変更するには?)
それは、コードの主要な部分である:
export default class TodoItem extends Component {
constructor(props) {
super(props);
this.state = { secondsStart: this.props.minSeconds }
this.handleStartClick = this.handleStartClick.bind(this)
}
static propTypes = {
todo: PropTypes.object.isRequired,
deleteTodo: PropTypes.func.isRequired,
completeTodo: PropTypes.func.isRequired,
}
static defaultProps = {
minSeconds: 0
}
getSeconds =() => {
return ('0' + this.state.secondsStart % 60).slice(-2)
}
getMinutes =() => {
return Math.floor('0' + this.state.secondsStart/60)
}
getHoures =() => {
return Math.floor(this.state.secondsStart/60)
}
handleSave = (id, text) => {
if (text.length === 0) {
this.props.deleteTodo(id)
}
}
handleStartClick =() => {
this.incrementer = setInterval(() => {
this.setState({secondsStart:(this.state.secondsStart + 1)
});
}, 1000)
}
handleStopClick =() => {
clearInterval(this.incrementer)
}
render() {
const { todo, completeTodo, deleteTodo} = this.props
let element
if (this.state.todo) {
element = (
<TodoTextInput text={todo.text}
onSave={(text) => this.handleSave(todo.id, text)} />
)
} else {
element = (
<div className="view">
<input className="toggle"
type="checkbox"
checked={todo.completed}
onChange={() => completeTodo(todo.id)} />
<label>
{todo.text}
</label>
<div className="buttons">
<h6>{this.getHoures()}:{this.getMinutes()}:{this.getSeconds()}</h6>
{(this.state.secondsStart === 0)
? <button className="timer-start" onClick={this.handleStartClick}>Start</button>
: <button className="timer-stop" onClick={this.handleStopClick}>Stop</button>
}
</div>
<button className="destroy"
onClick={() => deleteTodo(todo.id)} />
</div>
)
}
申し訳ありませんが、多分それはあまりにも大きいですが、私は本当に私が非表示にすることができますかわからない、多分何かが有用であろう。 私はあなたの助けに感謝します。
I、右理解されるように、私はこのように制御することができ、これらの状態: handleStartClick =()=> { this.incrementer =たsetInterval(()=> { this.setState({secondsStart:(this.state。 seconds start + 1) }); }、 this.setState({ timerRunning:true }); } –
はい。正確な詳細については、反応setStateメソッドを確認してください。 –
ありがとう、本当に助かったよ。 –