Reputation: 3
I am trying to build with ReactJS a search bar dynamically based on props value, but I get the following error 'Cannot read property 'handleChange' of undefined' . I don't see what I am doing wrong, I just want to display two DatePicker.
Here is my code:
app.js
import React, { Component } from 'react';
import { render } from 'react-dom';
import SearchBar from '../searchBar/searchBar';
export default class Hello extends Component {
render() {
const today = Moment(new Date ()).format('YYYYMMDD');
const fields_newSec = [ {"type":"dateField", "name":"from", "value":today, "label":"From Date"},
{"type":"dateField", "name":"to", "value":today, "label":"To Date"} ];
return (
<div>
<SearchBar searchBarFields={fields_newSec} />
</div>
);
}
}
render(<Hello />, document.getElementById('app'));
searchBar.js
import React from 'react';
import DatePicker from 'material-ui/TextField';
import Moment from 'moment';
class SearchBar extends React.Component {
constructor(props) {
super(props);
this.handleChange = this.handleChange.bind(this);
}
handleChange(event) {
console.log("Event: "+event.target.value);
console.log("Text Name: "+event.target.name);
}
render() {
var itemsList = this.props.searchBarFields.map(function(element, index) {
return (
<DatePicker
key={index}
label={element.label}
type="date"
name={element.name}
defaultValue={Moment(new Date()).format('YYYY-MM-DD')}
onChange={this.handleChange}
InputLabelProps={{
shrink: true,
}}
/>
);
});
return(
<div>{itemsList}</div>
);
}
}
export default SearchBar;
Upvotes: 0
Views: 2389
Reputation: 549
I think you need use arrow function for map
render() {
return (
<div>
{this.props.searchBarFields.map((element, index) => (
<DatePicker
key={index}
label={element.label}
type="date"
name={element.name}
defaultValue={Moment(new Date()).format('YYYY-MM-DD')}
onChange={this.handleChange}
InputLabelProps={{
shrink: true,
}}
/>
))}
</div>
)
}
Upvotes: 1