语义-ui-redux-form onChange 中的反应下拉列表无法更新状态

semantic-ui-react dropdown in redux-form onChange didn't work to update state

我遇到了一个问题,redux 没有获得 onChange 值状态(状态相等)

这是我的代码

ReduxFormDropdown.js

import React from 'react'
import { PropTypes } from 'prop-types'
import { Icon, Dropdown } from 'semantic-ui-react'
import FormLabel from '../FormLabel'

export const ReduxFormDropdown = ({
  input,
  label,
  placeholder,
  meta: {
    error,
    touched,
  },
  ...custom
}) => {
  const errorMessage = (
    <div style={{ color: '#E20000', paddingTop: '.3rem', fontSize: '12px' }} >
      <Icon name="warning" />
      {error}
    </div>
  )

  return (
    <div>
      <FormLabel>{label}</FormLabel>
      <Dropdown
        placeholder={placeholder}
        value={input.value}
        onChange={(param, data) => props.input.onChange(data.value)}
        error={touched && error}
        selection
        {...input}
        {...custom}
      />
      {touched && error && errorMessage}
    </div>
  )
}

ReduxFormDropdown.propTypes = {
  input: PropTypes.object.isRequired,
  label: PropTypes.string,
  placeholder: PropTypes.string,
  meta: PropTypes.shape({
    touched: PropTypes.bool,
    error: PropTypes.string,
  }),
}

Form.js

//...      
const genders = [
  {
    key: '1',
    text: 'Male',
    value: 'male',
  },
  {
    key: '2',
    text: 'Female',
    value: 'female',
  },
  {
    key: '3',
    text: 'Other',
    value: 'other',
  },
]
//...    

<Form.Field>
  <Field
   name="gender"
   component={ReduxFormDropdown}
   placeholder="Gender"
   options={genders}
  />
</Form.Field>
//...

当我选择时该值没有改变,当我检查 redux 开发工具时我发现该值没有得到更新(状态相等)。我错过了什么?感谢您的回复。

我突出显示了最重要的几行:

<Dropdown
  onChange={(param, data) => props.input.onChange(data.value)}
  {...input}
/>

props.inputinput 是包含 onChange 函数的相同对象。因此,当您将 input 对象传播到 Dropdown 组件时,您将覆盖 onChange 处理程序。

正确的用法是:

<Dropdown
  {...input}
  onChange={(param, data) => props.input.onChange(data.value)}
/>