javascript - React - 普通选择值不更新

标签 javascript reactjs select

我的组件中有一个简单的普通选择:

内容.js:

state = {
    langValue: 'fr'
};

handleChange = event => {
    const newValue = event.target.value;
    this.setState({ value: newValue }, () =>
        this.props.onChangeLanguage(newValue)
    );
};

render() {
  return (
      <select value={this.state.langValue} onChange={this.handleChange}>
          <option value="fr">Français</option>
          <option value="en">English</option>
      </select>
  );
}

调用 onChangeLanguage 方法并更新翻译,但选择的值未更改。如果我在设置状态下删除回调,则选择值正在更新,但语言没有更新(这是正常的)

应用程序.js:

...

let i18nConfig = {
    locale: navigator.language.split(/[-_]/)[0],
    messages: getMessagesFromLang(navigator.language.split(/[-_]/)[0])
};

const [lang, setLang] = React.useState(i18nConfig.locale); // keeps state of lang in App
function onChangeLanguage(lang) {
    setLang(lang); // changes the lang when selec value changes
}

...

最佳答案

您正在设置value的状态属性:

this.setState({ value: newValue }

但随后将其用作langValue

<select value={this.state.langValue} onChange={this.handleChange}>

更改一个以匹配另一个,它就会起作用。

<小时/>

关于您的评论,下面的代码片段证明代码按预期工作。如果您遇到 select 值未更新的问题,我猜测这一定是 prop 函数的副作用。

class Example extends React.Component {
  state = {
      langValue: 'fr'
  };

  handleChange = event => {
      const newValue = event.target.value;
      this.setState({ langValue: newValue }, () =>
          console.log('call your prop function')
      );
  };

  render() {
    return (
        <select value={this.state.langValue} onChange={this.handleChange}>
            <option value="fr">Français</option>
            <option value="en">English</option>
        </select>
    );
  }
}

ReactDOM.render(<Example />, document.getElementById('root'));
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/16.6.3/umd/react.production.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/16.6.3/umd/react-dom.production.min.js"></script>
<div id="root"/>

关于javascript - React - 普通选择值不更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60868250/

相关文章:

c# - 在数据库中保存 "Select Multiple"值

mysql - SQL 从多个表中选择 sql-ex 6

javascript - 使用 express 提供静态文件的最简单方法是什么?

javascript - 对名为 "callback"的 getJSON GET 参数感到困惑

JavaScript onClick,通过函数和按钮从表(使用 PHP 从数据库填充)获取数据(id)

javascript - 使用 jquery 删除其他 HTML 元素时如何动态删除 HTML 元素

javascript - react /归零 : Should containers have any knowledge of state structure?

mysql - SELECT SUM 查询不断收到错误

reactjs - 如何告诉 react-router 等到有事情发生?

reactjs - 清除动态添加的输入字段