为啥必须在 componentDidMount() 期间解析函数中的函数调用?

Posted

技术标签:

【中文标题】为啥必须在 componentDidMount() 期间解析函数中的函数调用?【英文标题】:Why do you have to parse the function call in a function during componentDidMount()?为什么必须在 componentDidMount() 期间解析函数中的函数调用? 【发布时间】:2019-11-05 17:16:44 【问题描述】:

我正在处理 react Doc 上的状态和生命周期页面。为什么我必须在解析函数中调用函数?

我尝试删除已解析的函数并仅调用 this.tick() 但它不起作用。

class Clock extends React.Component
    constructor(props)
        super(props);
        this.state = date: new Date();
    

    componentDidMount()
        this.timerID = setInterval(()=>this.tick(), 1000)
    

    componentWillUnmount()
        clearInterval(this.timerID)
    

    tick()
        this.setState(
            date: new Date()
        )
    

    render()
        return (
                <h1>new Date().toLocaleTimeString() </h1>
        );
    

【问题讨论】:

我不确定我是否理解您的问题,但如果您要问的话,您可以使用setInterval(this.tick, 1000) 【参考方案1】:

因为您需要传递对要执行的函数的引用,如果您传递this.tick() 是对要执行的函数的调用,您可以传递给this.tick,这也应该可以工作

【讨论】:

如果你只是传递 setInterval(this.tick, 1000) ,调用上下文 this 将会丢失,它不会工作。这就是为什么您需要传递一个胖箭头函数,该函数捕获并保留this。 ` @LogiGunaratnam 当谈到 JS 基础知识时,MDN 通常是:developer.mozilla.org/en-US/docs/Web/javascript/Reference/… @IvanKoshelev 你是对的,我的错我忘了它是不是箭头函数的 componentdidmount 所以这个上下文丢失了

以上是关于为啥必须在 componentDidMount() 期间解析函数中的函数调用?的主要内容,如果未能解决你的问题,请参考以下文章

为啥 addChangeListener 应该在 componentDidMount 而不是 componentWillMount 中?

为啥 componentDidMount 在 react.js 和 redux 中被多次调用?

为啥 redux 多次初始化

为啥我的状态未定义?

在 componentDidMount 之后反应不渲染组件

ReactJS - ComponentDidMount在渲染之前执行