选择从 redux-devtools 更改值后未更改的框



locale 处于我的 redux 应用程序状态。通过 react-devtools(还原选项)更改其值,更改段落内部值,但不更改选择框值。如果它再次呈现,它不应该采用与 p 标签内相同的值吗?

import React, {Component, PropTypes} from 'react'
import {defineMessages, injectIntl, intlShape} from 'react-intl'
const messages = defineMessages({
  spanish: {
    id: 'languageSelector.spanish',
    description: 'Select language',
    defaultMessage: 'Spanish'
  },
  english: {
    id: 'languageSelector.english',
    description: 'Select language',
    defaultMessage: 'English'
  },
  french: {
    id: 'languageSelector.french',
    description: 'Select language',
    defaultMessage: 'French'
  }
})
class LanguageSelector extends Component {
    render () {
      const {formatMessage, locale} = this.props.intl
      return (
        <div>
        <select defaultValue={locale} onChange={(e) => this.handleChange(e)}>
                <option id='es' value='es'>{formatMessage(messages.spanish)}</option>
                <option id='fr' value='fr'>{formatMessage(messages.french)}</option>
                <option id='en' value='en'>{formatMessage(messages.english)}</option>
        </select>
        <p>{locale}</p>
        </div>
        )
    }
    handleChange (e) {
      this.props.onChange(e.target.value)
    }
}
LanguageSelector.propTypes = {
  intl: intlShape.isRequired,
  onChange: PropTypes.func.isRequired
}
export default injectIntl(LanguageSelector)

defaultValue更改为value . 即

<select value={locale} onChange={(e) => this.handleChange(e)}>

解释

仅当表单域是不受控制的组件时,才使用defaultValue。更改不受控制的组件的值的唯一方法是通过用户输入。

如果使用value则表单组件被视为受控组件。可以通过显式设置值在后续渲染中更改其值。受控组件还必须具有onChange处理程序,您的组件具有。

有关受控/不受控制的表单组件的更多信息,请参阅 React 中的表单。

相关内容

  • 没有找到相关文章

最新更新