首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在react中使用moment & moment-timezone创建运行时钟

在react中使用moment & moment-timezone创建运行时钟
EN

Stack Overflow用户
提问于 2017-08-10 06:26:58
回答 1查看 3.5K关注 0票数 2

我正在尝试创建一个react组件来呈现时钟滴答作响。我对不同的时区使用moment和moment-timezone。我可以创建一个具有静态时钟(不会递增)的组件,但我无法创建一个滴答作响的时钟。代码如下:

代码语言:javascript
复制
import React from 'react';
import ReactDOM from 'react-dom';
import $ from 'jquery';
import moment from 'moment';
import 'moment-timezone';

export default class TimeClock extends React.Component {

    constructor(props) {
      super(props);
      this.state = { time: moment().clone().tz(this.props.timezone).toLocaleString() };
      this.displayTime = this.displayTime.bind(this);
    }

    displayTime(){
        //let now = moment();
        //let location = now.clone().tz(this.props.timezone);
        this.setState({
            time: moment().clone().tz(this.props.timezone).toLocaleString()
        });
        //return location.toLocaleString();
    }
    render(){
        //let now = moment();
        //let location = now.clone().tz(this.props.timezone);
        //let timezone = this.props.timezone;
        return (
            <div>
                <p>{this.props.timezone}</p>
                <p>{setInterval(this.displayTime,1000)}</p>
            </div>
        );
    }
}

注意:它从父组件App.js传递了一个属性(时区)。

当前代码输出以下内容:

代码语言:javascript
复制
Australia/Melbourne

#######

其中,#######表示从5或6开始并迅速递增的某个数字。

有人能解释一下我做错了什么吗?

编辑:在发布这个问题后不久,我找到了下面的链接(Where to apply my moment() function in a react component?),我根据我的代码对其进行了调整并使其正常工作,但我不明白为什么我的尝试不起作用。我是个新手。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-08-10 06:39:18

您的代码不会呈现与当前时间相关的任何内容。这一行:

代码语言:javascript
复制
<p>{setInterval(this.displayTime,1000)}</p>

不打印当前时间-它显示创建的间隔的ID,因为这是setInterval()函数返回的ID。

因此,首先,您应该根据组件的状态更改此行以显示时间。这可以像这样完成:

代码语言:javascript
复制
<p>{this.state.time}</p>

您必须做的另一件事是正确地创建间隔。在render()方法中设置它不是一个好主意,因为您将创建一个新的间隔

代码语言:javascript
复制
componentDidMount() {
    // Arrow function allows you to use "this" in context of the Component
    this.interval = setInterval(() => {
        this.displayTime();
    }), 1000);
}

(还应记住在从视图中删除构件后停用间隔)。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45601565

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档