-
Notifications
You must be signed in to change notification settings - Fork 100
/
Value.js
37 lines (31 loc) · 717 Bytes
/
Value.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
import { Component } from 'react'
import renderProps from '../utils/renderProps'
const noop = () => {}
class Value extends Component {
state = {
value: this.props.initial,
}
_set = (updater, cb = noop) => {
const { onChange = noop } = this.props
this.setState(
typeof updater === 'function'
? state => ({ value: updater(state.value) })
: { value: updater },
() => {
onChange(this.state.value)
cb()
}
)
}
_reset = (cb = noop) => {
this._set(this.props.initial, cb)
}
render() {
return renderProps(this.props, {
value: this.state.value,
set: this._set,
reset: this._reset,
})
}
}
export default Value