【发布时间】:2020-08-30 08:33:09
【问题描述】:
首先,我知道关于这个主题有很多问题,而且我已经阅读了所有我认为适用于我的情况的问题。这个线程React component initialize state from props 特别似乎是我需要的,但这里没有提到任何工作。无论如何,进入我的代码。它只是一个简单的倒计时计时器,它以用户输入(以分钟为单位)为起点:
class Timer extends Component {
constructor(props) {
super(props);
this.state = {
minutes: props.workPeriod,
seconds: 0
};
}
componentDidMount() {
setInterval(() => {
const {minutes, seconds} = this.state
console.log("minute state: ", minutes)
if(this.props.countdownHasStarted) {
if(seconds > 0) {
this.setState(({seconds}) => ({
seconds: seconds - 1
}))
}
if(seconds === 0) {
if(minutes === 0) {
clearInterval(this.myInterval)
} else {
this.setState(({minutes}) => ({
minutes: minutes - 1,
seconds: 59
}))
}
}
}
}, 1000)
}
...
const selector = formValueSelector('intervalSettings')
Timer = connect(state => {
const workPeriod = selector(state, 'workPeriod')
return {
workPeriod,
countdownHasStarted: state.countdownHasStarted
}
})(Timer)
由于所有内容都位于组件树上,因此我使用了 Redux,因此 workPeriod 来自 Redux 存储区,如果这有什么不同的话。 当我在控制台中打印出“分钟”时,我得到了未定义,当它被渲染时,我只得到了 NaN 分钟。如何使 props.workPeriod 进入状态,以便对其进行定义并能够对其进行操作?
我包括了我是如何从 Redux 商店获得 workPeriod 的,以防万一我的问题与此有关,但是 {this.props.workPeriod} 渲染得很好,所以我认为那里一切都很好。
提前致谢!
(经过编辑以纳入以前的建议和问题)
【问题讨论】:
-
在构造函数块中使用
console.log(props.workPeriod)会得到什么? -
好问题!我不确定。但是我怎么还能在 DOM 中毫无问题地渲染
this.props.workPeriod? -
我为你的问题添加了答案
标签: reactjs redux redux-form react-props react-state