如何修复 React 中的“TypeError:moment is not a function”?

时间:2021-05-05 14:33:31

标签: javascript reactjs api momentjs typeerror

我已经尝试降级到 Moment.js 版本 2.24.0,但这并没有解决我的问题。下面是我的代码。有什么我做错了吗?错误指向我的 formatDate 函数,但我似乎无法查明问题。

import moment from 'moment';

class ViewMorePhotos extends Component {
    state = {
        date: moment(),
        photo: ""
    };
    
    formatDate = moment => {
        let year = moment().year();
        let month = moment().month() + 1;
        let day = moment().date();
        return `${year}-${month}-${day}`;
    };
    
    changeDate = dateFromInput => {
        this.setState({ date: dateFromInput });
        this.getPhoto(this.formatDate(dateFromInput));
    };

    getPhoto = date => {
        fetch( `api-url`)
            .then(response => response.json())
            .then(photoData => this.setState({ photo: photoData }));
    };
    
    render() {
        return (
            <React.Fragment>
                <NavBar />
                <DateInput changeDate={this.changeDate} date={this.state.date} />
                <Photo photo={this.state.photo} />
            </React.Fragment>
        );
    }
}

这是我收到的错误:

TypeError: moment is not a function
ViewMorePhotos/this.formatDate
src/components/ViewMorePhotos.js:17

  14 | };
  15 | 
  16 | formatDate = moment => {
> 17 |     let year = moment().year();
     | ^  18 |     let month = moment().month() + 1;
  19 |     let day = moment().date();
  20 |     return `${year}-${month}-${day}`;

ViewMorePhotos/this.changeDate
src/components/ViewMorePhotos.js:25

  22 | 
  23 | changeDate = dateFromInput => {
  24 |     this.setState({ date: dateFromInput });
> 25 |     this.getPhoto(this.formatDate(dateFromInput));
     | ^  26 | };
  27 | 
  28 | getPhoto = date => {

1 个答案:

答案 0 :(得分:0)

将您的功能更改为

formatDate = aDate => {
    let m = moment(aDate)
    let year = m.year();
    let month = m.month() + 1;
    let day = m.date();
    return `${year}-${month}-${day}`;
};

未测试但应该可以工作。