Skip to content

Commit 4bef2d8

Browse files
committed
Merge pull request #24 from Hacker0x01/fix-onchange-handler
Use props instead of state to pass the selected date
2 parents c0dc25b + 534a130 commit 4bef2d8

File tree

4 files changed

+37
-36
lines changed

4 files changed

+37
-36
lines changed

example.html

Lines changed: 23 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -16,13 +16,32 @@ <h1>ReactJS DatePicker Example</h1>
1616
<script type="text/javascript">
1717
var container = document.querySelector('#datepicker-container');
1818
var log = document.querySelector('#log');
19-
var component = DatePicker({
20-
onChange: function(date) {
19+
var exampleComponent = React.createClass({
20+
displayName: 'exampleComponent',
21+
22+
getInitialState: function() {
23+
return {
24+
date: moment()
25+
};
26+
},
27+
28+
handleChange: function(date) {
29+
this.setState({
30+
date: date
31+
});
32+
2133
log.innerText = "You've selected: " + date.format();
34+
},
35+
36+
render: function() {
37+
return DatePicker({
38+
selected: this.state.date,
39+
onChange: this.handleChange
40+
});
2241
}
23-
});
42+
})
2443

25-
React.renderComponent(component, container);
44+
React.renderComponent(exampleComponent(), container);
2645
</script>
2746
</body>
2847
</html>

react-datepicker.js

Lines changed: 8 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -2,19 +2,20 @@
22
/** @jsx React.DOM */
33

44
var Day = _dereq_('./day');
5+
var DateUtil = _dereq_('./util/date');
56

67
var Calendar = React.createClass({displayName: 'Calendar',
78
getInitialState: function() {
89
return {
9-
date: this.props.selected.clone()
10+
date: new DateUtil(this.props.selected).clone()
1011
};
1112
},
1213

1314
componentWillReceiveProps: function(nextProps) {
1415
// When the selected date changed
1516
if (nextProps.selected !== this.props.selected) {
1617
this.setState({
17-
date: nextProps.selected.clone()
18+
date: new DateUtil(nextProps.selected).clone()
1819
});
1920
}
2021
},
@@ -54,7 +55,7 @@ var Calendar = React.createClass({displayName: 'Calendar',
5455
day:day,
5556
date:this.state.date,
5657
onSelect:this.props.onSelect,
57-
selected:this.props.selected} )
58+
selected:new DateUtil(this.props.selected)} )
5859
);
5960
},
6061

@@ -96,22 +97,17 @@ var Calendar = React.createClass({displayName: 'Calendar',
9697

9798
module.exports = Calendar;
9899

99-
},{"./day":3}],2:[function(_dereq_,module,exports){
100+
},{"./day":3,"./util/date":5}],2:[function(_dereq_,module,exports){
100101
/** @jsx React.DOM */
101102

102-
var DateUtil = _dereq_('./util/date');
103103
var Popover = _dereq_('./popover');
104104
var Calendar = _dereq_('./calendar');
105105

106106
var DatePicker = React.createClass({displayName: 'DatePicker',
107107
getInitialState: function() {
108-
var value = this.props.value;
109-
var selected = new DateUtil(moment(value)); // If value is undefined moment defaults to today
110-
111108
return {
112109
focus: false,
113-
selected: selected,
114-
value: selected.format("YYYY-MM-DD")
110+
value: this.props.selected.format("YYYY-MM-DD")
115111
};
116112
},
117113

@@ -162,23 +158,18 @@ var DatePicker = React.createClass({displayName: 'DatePicker',
162158

163159
setSelected: function(date) {
164160
this.setState({
165-
selected: date,
166161
value: date.format("YYYY-MM-DD")
167162
});
168163

169164
this.props.onChange(date.moment());
170165
},
171166

172-
inputValue: function() {
173-
return this.state.selected.format("YYYY-MM-DD");
174-
},
175-
176167
calendar: function() {
177168
if (this.state.focus) {
178169
return (
179170
Popover(null,
180171
Calendar(
181-
{selected:this.state.selected,
172+
{selected:this.props.selected,
182173
onSelect:this.handleSelect,
183174
onClick:this.handleCalendarClick} )
184175
)
@@ -225,7 +216,7 @@ var DatePicker = React.createClass({displayName: 'DatePicker',
225216

226217
module.exports = DatePicker;
227218

228-
},{"./calendar":1,"./popover":4,"./util/date":5}],3:[function(_dereq_,module,exports){
219+
},{"./calendar":1,"./popover":4}],3:[function(_dereq_,module,exports){
229220
/** @jsx React.DOM */
230221

231222
var Day = React.createClass({displayName: 'Day',

src/calendar.js

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,20 @@
11
/** @jsx React.DOM */
22

33
var Day = require('./day');
4+
var DateUtil = require('./util/date');
45

56
var Calendar = React.createClass({
67
getInitialState: function() {
78
return {
8-
date: this.props.selected.clone()
9+
date: new DateUtil(this.props.selected).clone()
910
};
1011
},
1112

1213
componentWillReceiveProps: function(nextProps) {
1314
// When the selected date changed
1415
if (nextProps.selected !== this.props.selected) {
1516
this.setState({
16-
date: nextProps.selected.clone()
17+
date: new DateUtil(nextProps.selected).clone()
1718
});
1819
}
1920
},
@@ -53,7 +54,7 @@ var Calendar = React.createClass({
5354
day={day}
5455
date={this.state.date}
5556
onSelect={this.props.onSelect}
56-
selected={this.props.selected} />
57+
selected={new DateUtil(this.props.selected)} />
5758
);
5859
},
5960

src/datepicker.js

Lines changed: 2 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,13 @@
11
/** @jsx React.DOM */
22

3-
var DateUtil = require('./util/date');
43
var Popover = require('./popover');
54
var Calendar = require('./calendar');
65

76
var DatePicker = React.createClass({
87
getInitialState: function() {
9-
var value = this.props.value;
10-
var selected = new DateUtil(moment(value)); // If value is undefined moment defaults to today
11-
128
return {
139
focus: false,
14-
selected: selected,
15-
value: selected.format("YYYY-MM-DD")
10+
value: this.props.selected.format("YYYY-MM-DD")
1611
};
1712
},
1813

@@ -63,23 +58,18 @@ var DatePicker = React.createClass({
6358

6459
setSelected: function(date) {
6560
this.setState({
66-
selected: date,
6761
value: date.format("YYYY-MM-DD")
6862
});
6963

7064
this.props.onChange(date.moment());
7165
},
7266

73-
inputValue: function() {
74-
return this.state.selected.format("YYYY-MM-DD");
75-
},
76-
7767
calendar: function() {
7868
if (this.state.focus) {
7969
return (
8070
<Popover>
8171
<Calendar
82-
selected={this.state.selected}
72+
selected={this.props.selected}
8373
onSelect={this.handleSelect}
8474
onClick={this.handleCalendarClick} />
8575
</Popover>

0 commit comments

Comments
 (0)