【问题标题】:React Big Calendar Error: Element type is invalid: expected a string (for built-in components)React Big Calendar 错误:元素类型无效:预期为字符串(对于内置组件)
【发布时间】:2019-08-29 09:16:24
【问题描述】:

第一个错误:

元素类型无效:应为字符串(用于内置组件) 或类/函数(用于复合组件)但得到:未定义。你 可能忘记从定义它的文件中导出您的组件, 或者您可能混淆了默认导入和命名导入。

检查App的渲染方法。

第二个错误:

未捕获的类型错误:无法读取属性“momentLocalizer”的 未定义

此处代码:https://stackblitz.com/edit/react-bcvdd6

import BigCalendar from 'react-big-calendar';
import { momentLocalizer } from 'react-big-calendar';
import moment from 'moment';
import 'react-big-calendar/lib/css/react-big-calendar.css';
const localizer = momentLocalizer(moment);

class App extends Component {
  constructor() {
    super();
    this.state = {
      events: [{
          id: 0,
          title: 'All Day Event very long title',
          allDay: true,
          start: new Date(2015, 3, 0),
          end: new Date(2015, 3, 1),
        },
        {
          id: 1,
          title: 'Long Event',
          start: new Date(2015, 3, 7),
          end: new Date(2015, 3, 10),
        },

        {
          id: 2,
          title: 'DTS STARTS',
          start: new Date(2016, 2, 13, 0, 0, 0),
          end: new Date(2016, 2, 20, 0, 0, 0),
        },

        {
          id: 3,
          title: 'DTS ENDS',
          start: new Date(2016, 10, 6, 0, 0, 0),
          end: new Date(2016, 10, 13, 0, 0, 0),
        },

        {
          id: 4,
          title: 'Some Event',
          start: new Date(2015, 3, 9, 0, 0, 0),
          end: new Date(2015, 3, 10, 0, 0, 0),
        }
      ]
    };  
  }

  render() {
    return (
      <div>
        <BigCalendar
          localizer={localizer}
            events={this.state.events}
            startAccessor="start"
            endAccessor="end"
          />
        </div>
    );
  }
}

【问题讨论】:

    标签: javascript reactjs react-big-calendar


    【解决方案1】:

    你应该像这样导入:

    import { Calendar, momentLocalizer } from 'react-big-calendar';
    
    <Calendar
        localizer={localizer}
        events={this.state.events}
        startAccessor="start"
        endAccessor="end"
      />
    
    

    【讨论】:

      【解决方案2】:

      检查文档,我已经用这段代码解决了这个问题:

      import React, { Component } from 'react';
      import { render } from 'react-dom';
      import Hello from './Hello';
      import './style.css';
      import { Calendar, momentLocalizer } from 'react-big-calendar';
      import moment from 'moment';
      import 'react-big-calendar/lib/css/react-big-calendar.css';
      const localizer = momentLocalizer(moment);
      
      class App extends Component {
        constructor() {
          super();
          this.state = {
            events: [{
                id: 0,
                title: 'All Day Event very long title',
                allDay: true,
                start: new Date(2015, 3, 0),
                end: new Date(2015, 3, 1),
              },
              {
                id: 1,
                title: 'Long Event',
                start: new Date(2015, 3, 7),
                end: new Date(2015, 3, 10),
              },
      
              {
                id: 2,
                title: 'DTS STARTS',
                start: new Date(2016, 2, 13, 0, 0, 0),
                end: new Date(2016, 2, 20, 0, 0, 0),
              },
      
              {
                id: 3,
                title: 'DTS ENDS',
                start: new Date(2016, 10, 6, 0, 0, 0),
                end: new Date(2016, 10, 13, 0, 0, 0),
              },
      
              {
                id: 4,
                title: 'Some Event',
                start: new Date(2015, 3, 9, 0, 0, 0),
                end: new Date(2015, 3, 10, 0, 0, 0),
              }
            ]
          };  
        }
      
        render() {
          return (
            <div>
              <Calendar
                localizer={localizer}
                  events={this.state.events}
                  startAccessor="start"
                  endAccessor="end"
                />
              </div>
          );
        }
      }
      
      render(<App />, document.getElementById('root'));
      
      

      【讨论】:

        【解决方案3】:

        你可以试试这个

        BigCalendar.setLocalizer(BigCalendar.momentLocalizer(moment));
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2020-09-09
          • 1970-01-01
          • 1970-01-01
          • 2021-07-06
          • 2021-03-25
          • 2020-06-14
          • 2020-02-29
          • 1970-01-01
          相关资源
          最近更新 更多