Home > Mobile >  Cannot read properties of created ref with createRef()
Cannot read properties of created ref with createRef()

Time:10-10

This is my calendar component:

export default class DemoApp extends React.Component {

  today = new Date();
  calendarRef = createRef();

....

I have a render function:

render() {
    const workMin = this.state.hours.map(item => item.startTime).sort().shift();
    const workMax = this.state.hours.map(item => item.endTime).sort().pop();
    this.getDateResult();
    return (
      <div className='demo-app'>
        {this.renderSidebar()}
        <div className='demo-app-main'>
          <FullCalendar
            ref={this.calendarRef}
            plugins={[dayGridPlugin, timeGridPlugin, interactionPlugin]}
            headerToolbar={{
              left: 'prev,next today',
              center: 'title'
            }}
            locale="hr"
            initialView='timeGridWeek'
            editable={true}
            selectable={true}
            selectMirror={true}
            dayMaxEvents={true}
            weekends={this.state.weekendsVisible}
            initialEvents={INITIAL_EVENTS}
            select={this.handleDateSelect}
            eventContent={renderEventContent}
            eventClick={this.handleEventClick}
            eventsSet={this.handleEvents}
            eventStartEditable={false}
            slotMinTime={workMin}
            slotMaxTime={workMax}
            validRange={{
              start: this.today
            }}
            events={this.state.morningBgEvent}
          />
        </div>
      </div>
    )
  }

And this is my function:

getDateResult() {
    const calendarApi = this.calendarRef.current.getApi();
    console.log(calendarApi.activeStart);
  }

Error:

Cannot read properties of null (reading 'getApi')

I just want to console.log the start day of next week view.

CodePudding user response:

Explanation:

Why get this error?

You define a ref for your calendar and passed it to the FullCalendar element which is correct so far. but you are getting the calendarRef value before assigning it to the FullCalendar.

this.getDateResult();         // getting ref before assinging
return (
  <div className='demo-app'>
    {this.renderSidebar()}
    <div className='demo-app-main'>
      <FullCalendar
        ref={this.calendarRef}  // assigning ref

Using componentDidMount will ensure you the FullCalendar get its ref and then calls the getDateResult method properly.

The Solution:

Try to call your getDateResult inside of react life cycle method. for example, if you want to get the result on the initial phase, call the getDateResult method inside of a componentDidMount.

componentDidMount() {
   getDateResult()
}

Also, with functional component structure with hooks:

useEffect(() => {
  getDateResult()
}, []) 
  • Related