gpt4 book ai didi

javascript - 从 React 中的状态借用属性值

转载 作者:行者123 更新时间:2023-12-02 14:49:04 24 4
gpt4 key购买 nike

我不知道我的措辞是否正确,所以请耐心等待。基本上,我有一个功能计数器的组件(递增或递减)。另一个组件是一个计时器,它从(默认)25 倒数到 0。

以前,我将计时器的值设置为 25,但我试图计时器随着计数器值的变化而变化,并且当用户按下“开始”时按钮,计时器将从计数器设置的任何数字开始倒计时

我可以让组件单独工作,但不能一起工作。我尝试过设置 this.state.currentCount值为 this.props.time ,然后更改 this.state.currentCount 的值,但没有运气。计时器要么不动,要么不反射(reflect)计数器的值。

不确定我是否应该使用componentWillReceiveProps相反。

任何帮助将不胜感激。如果有帮助的话,底部有一个屏幕截图。

session 组件:

const Session = React.createClass({

getInitialState: function() {
return {
minutes: 25,
seconds: 0
};
},

increment: function() {
this.setState({ minutes: this.state.minutes + 1 });
},

decrement: function() {
this.setState({ minutes: this.state.minutes - 1 });
},

timeToString: function(time) {
return time + ':00';
},

render: function() {
return (
<section>
<button onClick={this.increment}>+</button>
<button onClick={this.decrement}>-</button>
{this.state.minutes}
<Clock time={this.state.minutes}/>
</section>
);
}

});

module.exports = Session;

时钟组件:

const Clock = React.createClass({

getInitialState: function() {
return { currentCount: this.props.time };
},

startTimer: function() {
var intervalId = setInterval(this.timer, 1000);
this.setState({ intervalId: intervalId });
},

pauseTimer: function() {
clearInterval(this.state.intervalId);
this.setState({ intervalId: this.props.time });
},

timer: function() {
var newCount = this.state.currentCount - 1;
if (newCount >= 0) {
this.setState({ currentCount: newCount });
} else {
clearInterval(this.state.intervalId);
}
},

render: function() {
return (
<section>
<button onClick={this.startTimer}>Start</button>
<button onClick={this.pauseTimer}>Pause</button>
{this.props.time}
<br></br>
{this.state.currentCount}
</section>
);
}

});

module.exports = Clock;

enter image description here

最佳答案

getInitialState 仅在组件首次初始化时运行,因此接下来从父组件更新它不会运行该函数。你是对的因为您想要使用生命周期事件之一,在本例中componentWillReceiveProps 听起来是最合适的,因为你可以setState 在那里,你不需要等待组件渲染(否则您将使用componentDidUpdate)。

我还没有检查过这段代码,但我认为它应该适用于此添加:

const Clock = React.createClass({

...

componentWillReceiveProps: function(nextProps) {
// Perhaps pause timer here as well?
this.setState({
currentCount: nextProps.time
})
},

...

});

关于javascript - 从 React 中的状态借用属性值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36347855/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com