【问题标题】:React Function: TypeError: Object(...) is not a functionReact Function: TypeError: Object(...) is not a function
【发布时间】:2021-09-15 19:10:37
【问题描述】:

我在更新团队代码以应用不活动功能时遇到了一些问题。但是当我尝试这样做时,我在控制台上收到一条错误消息

TypeError: Object(...) 不是函数

如果有人知道或知道问题的真正原因,请告诉我。

这是控制台

代码如下:

import React, { Component } from 'react';
import { connect } from 'react-redux';
import * as Actions from '../actions';
import NeedContainer from './NeedContainer';
import ProfilContainer  from './ProfilContainer';
import DealContainer from './DealContainer';
import AmountContainer from './AmountContainer';
import DurationContainer from './DurationContainer';
import MonthlyContainer from './MonthlyContainer';
import ContributionContainer from './ContributionContainer';
import FeesContainer from './FeesContainer';
import createActivityDetector from 'activity-detector'
import { useState, useEffect } from 'react';

function useIdle(time) {
  const [isIdle, setIsIdle] = useState(false)
  useEffect(() => {
    const activityDetector = createActivityDetector(time)
    activityDetector.on('idle', () => setIsIdle(true))
    activityDetector.on('active', () => setIsIdle(true))
    return () => activityDetector.stop()
  }, [])
  return isIdle;
}

class SimulatorContainer extends Component {
  render() {
    const isIdle = useIdle({timeToIdle:1000})
    if (! this.props.ready)
    return (<div className="wf-loading">Loading ...</div>);
    return (
      <div className={this.props.className}>
        <NeedContainer />
        <ProfilContainer />
        <AmountContainer />
        <ContributionContainer />
        <DurationContainer />
        <MonthlyContainer />
        <DealContainer />
        <FeesContainer />
      </div>
    );
  }
}


const mapStateToProps = state => {
  return {
    ready:state.simulator.ready,
    interest:state.simulator.interest,
  }
}

const mapDispatchToProps = dispatch => {
  return {

    isReady: (ready) => {
      dispatch(Actions.isReady(ready));
    }
  }
}

export default connect(
  mapStateToProps,
  mapDispatchToProps
)(SimulatorContainer)

【问题讨论】:

  • 难道Actions.isReady(ready) 实际上被声明为不是函数?命名说明它应该是选择器。
  • 我不这么认为,因为在添加 useIdle 函数之前它运行良好。
  • 您在类组件中使用 Hooks。钩子只能在functional components中使用。
  • 我认为这是问题所在,我从未使用过类组件,如果您知道如何使用类组件做到这一点,我将非常感激。

标签: javascript reactjs


【解决方案1】:
class useIdle extends Component() {
constructor() {
  super(props)
  this.state = {
    isIdle: false
  }
}
componentDidMount() {
    this.activityDetector = createActivityDetector(time)
    this.activityDetector.on('idle', () => this.setState({isIdle: true}))
    this.activityDetector.on('active', () => this.setState({isIdle: true}))
}

componentWillUnmount() {
this.activityDetector.stop()
}

render(){
  return this.state.isIdle;
 }
}

【讨论】: