0

I've created a form using the React-Time-Range component for taking down banquet room reservations. For some reason, the start time being recorded always defaults to the moment() value I have listed in state.

Can you take a look at my code below to help determine why it does not change, even when a user selects a different value?

The component:

import moment from 'moment';
import TimeRange from 'react-time-range';

class Navbar extends Component {
 constructor(props){
 super(props)
 this.state = {
  startTime: moment(),
  endTime: moment()
}
}

returnFunctionStart = event => {
    this.setState({ startTime: event.startTime })
    };

  returnFunctionEnd = event => {
    this.setState({ endTime: event.endTime })
    };

render () {
return (
    <TimeRange
        onStartTimeChange={this.returnFunctionStart.bind(this)}
        onEndTimeChange={this.returnFunctionEnd}
        startMoment={this.state.startTime}
        endMoment={this.state.endTime}
    />
);
}

It is working fine for end time. Thanks.

norbitrial
  • 14,716
  • 7
  • 32
  • 59
Eric K.
  • 121
  • 3
  • 17

1 Answers1

0

The above code works fine, if you are using latest version of react you can clean up some code as shown below

You can avoid

  1. Binding read more here
  2. Constructor, since babel takes care of it read more here

import React, {
  Component
} from "react";
import ReactDOM from "react-dom";

import "./styles.css";

import moment from "moment";
import TimeRange from "react-time-range";

class Navbar extends Component {
  state = {
    startTime: moment(),
    endTime: moment()
  };

  returnFunctionStart = event => {
    this.setState({
      startTime: event.startTime
    });
  };

  returnFunctionEnd = event => {
    this.setState({
      endTime: event.endTime
    });
  };

  render() {
    return ( <
      TimeRange onStartTimeChange = {
        this.returnFunctionStart
      }
      onEndTimeChange = {
        this.returnFunctionEnd
      }
      startMoment = {
        this.state.startTime
      }
      endMoment = {
        this.state.endTime
      }
      />
    );
  }
}

const rootElement = document.getElementById("root");
ReactDOM.render( < Navbar / > , rootElement);

Working codesandbox

Learner
  • 8,379
  • 7
  • 44
  • 82