我的反应组件计时器不起作用

时间:2018-05-17 14:34:43

标签: node.js reactjs typescript jsx

我想将Header组件用作时钟计时器。我希望我的页面每秒渲染一次。我在谷歌搜索中关注了一些例子。但是,找不到像这样的例子。 为什么这个tick()函数不起作用? 控制台中没有错误。

这是我的第一个代码:

class index extends React.Component<Props, {}> {
constructor({ title }: Props) {
    super({ title });
}

render() {
    return (
        <Layout title={this.props.title}>
            <div className="header"><Header/></div>
            <div className="search-bar"><SearchBar/></div>
            <div className="Footer"><Footer/></div>
        </Layout>
    );
}
}

第二段代码:

class Header extends React.Component<{}, States>{
intervalID: any;
constructor() {
    super({}, {});
    this.state = {
        date: new Date().toLocaleString(),
    } 
    this.tick = this.tick.bind(this);
}

componentDidMount() {
    this.intervalID = setInterval(() => this.tick(), 1000);
}

componentWillUnmount() {
    clearInterval(this.intervalID);
}

tick() {
    this.setState({
        date: new Date().toLocaleString(),
    })
}

render() {
    return (
        <header>
            <p>Header: {this.state.date}</p>
        </header>
    );
}
}

export default Header;

此代码(Node.js路由器)调用First页面。 App为其视图引擎使用“express-react-view”。

import { Request, Response }  from "express";

/**
* Get /
* Home page.
* @param req 
* @param res 
*/
export let index = (req: Request, res: Response) => {
   res.render("index", {"title": "React, Front-end"})
};

1 个答案:

答案 0 :(得分:1)

您正在进行服务器端呈现(componentDidMount()执行的操作),这意味着不会调用React组件的生命周期挂钩。

因此,{{1}}上的间隔触发器不会被调用。 This article对此原因有很好的解释。