1
- import React , { Component } from 'react' ;
1
+ import React , { useCallback , useMemo , useState } from 'react' ;
2
2
import { StyleProp , ViewStyle } from 'react-native' ;
3
3
import { Colors } from '../../../style' ;
4
4
import SliderContext from './SliderContext' ;
5
5
import View from '../../view' ;
6
+ import tinycolor from 'tinycolor2' ;
6
7
7
8
interface SliderGroupProps {
8
9
color : string ;
@@ -11,40 +12,24 @@ interface SliderGroupProps {
11
12
children ?: React . ReactNode ;
12
13
}
13
14
14
- interface SliderGroupState {
15
- value : tinycolor . ColorFormats . HSLA ;
16
- }
17
-
18
- export default class SliderGroup extends Component < SliderGroupProps , SliderGroupState > {
19
- static displayName = 'IGNORE' ;
15
+ const SliderGroup = ( props : SliderGroupProps ) => {
16
+ const { color, onValueChange, children} = props ;
17
+ const [ value , setValue ] = useState ( Colors . getHSL ( color ) ) ;
20
18
21
- constructor ( props : SliderGroupProps ) {
22
- super ( props ) ;
19
+ const _setValue = useCallback ( ( value : tinycolor . ColorFormats . HSLA ) => {
20
+ setValue ( value ) ;
21
+ onValueChange ?.( Colors . getHexString ( value ) ) ;
22
+ } ,
23
+ [ onValueChange ] ) ;
23
24
24
- this . state = {
25
- value : Colors . getHSL ( props . color )
26
- } ;
27
- }
25
+ const contextProviderValue = useMemo ( ( ) => ( { value, setValue : _setValue } ) , [ value , _setValue ] ) ;
28
26
29
- getContextProviderValue ( ) {
30
- return {
31
- value : this . state . value ,
32
- setValue : this . setValue
33
- } ;
34
- }
27
+ return (
28
+ < View { ... props } >
29
+ < SliderContext . Provider value = { contextProviderValue } > { children } </ SliderContext . Provider >
30
+ </ View >
31
+ ) ;
32
+ } ;
35
33
36
- setValue = ( value : tinycolor . ColorFormats . HSLA ) => {
37
- this . setState ( { value} ) ;
38
- this . props . onValueChange ?.( Colors . getHexString ( value ) ) ;
39
- } ;
40
-
41
- render ( ) {
42
- return (
43
- < View { ...this . props } >
44
- < SliderContext . Provider value = { this . getContextProviderValue ( ) } >
45
- { this . props . children }
46
- </ SliderContext . Provider >
47
- </ View >
48
- ) ;
49
- }
50
- }
34
+ SliderGroup . displayName = 'IGNORE' ;
35
+ export default SliderGroup ;
0 commit comments