index.jsx 1.3KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. import { useEffect, useState } from 'react'
  2. import { Picker, View } from '@tarojs/components'
  3. import './style.scss'
  4. export default (props) => {
  5. const { kv, value, onChange, dicts, placeholder, mode, ...leftProps } = props
  6. const [rangeKey, rangeVal] = kv || ['label', 'value']
  7. const [inx, setInx] = useState()
  8. const [text, setText] = useState()
  9. const handleChange = (e) => {
  10. if (mode && mode !== 'selector') {
  11. onChange(e.detail.value)
  12. return
  13. }
  14. const index = e.detail.value - 0
  15. const item = dicts[index]
  16. if (onChange) {
  17. onChange(item[rangeVal], item)
  18. }
  19. }
  20. useEffect(() => {
  21. if (dicts && dicts.length > 0) {
  22. if (value !== undefined && value !== null) {
  23. for(let i = 0; i < dicts.length; i += 1) {
  24. if (dicts[i][rangeVal] === value) {
  25. setInx(i)
  26. setText(dicts[i][rangeKey])
  27. break;
  28. }
  29. }
  30. }
  31. }
  32. }, [dicts, rangeKey, rangeVal, value])
  33. useEffect(() => {
  34. if (mode && mode !== 'selector') {
  35. setText(value)
  36. }
  37. }, [mode, value])
  38. return (
  39. <Picker
  40. className='g-picker'
  41. rangeKey={rangeKey}
  42. onChange={handleChange}
  43. value={inx}
  44. range={dicts}
  45. mode={mode||'selector'}
  46. {...leftProps}
  47. >
  48. <View>{text || placeholder || '请选择'}</View>
  49. </Picker>
  50. )
  51. }