Bulma Select 表单元素 - 如何在选择选项时检测 "select" 或更改事件

Bulma Select form element - how to detect "select" or change event when an option is selected

我正在尝试使用 Bulma 的 Select 表单元素,但无法弄清楚最基本的问题...如何检测某个选项何时被 select 编辑用户?当语言 select 选项被 select 编辑时,我想调用一个函数来更改网站的语言,但不知道如何注册 "select" 事件。

该元素工作得很好,可以在两种语言之间切换,但是我需要做什么来检测其中一个选项何时真正被 selected?

<div className="navbar-item">
  <div className="select">
    <select>
      <option>English</option>
      <option>Chinese</option>
    </select>
  </div>
</div>

我试过使用 onChangeonClick 事件,但它们都不起作用,例如:

<div className="navbar-item">
  <div className="select">
    <select>
      <option onChange={() => changeLanguage('en')}>English</option>
      <option onChange={() => changeLanguage('cn')}>Chinese</option>
    </select>
  </div>
</div>

我是否需要为此创建单独的 React 状态变量并自己管理 selection?


回答

能够从各种答案中拼凑出一些信息来使这个工作正常,我尝试更新答案以使其正确,但为了社区的利益也张贴在这里。

这是带有 Select 选项的 JSX:

    <div className="navbar-item">
      <div className="select">
        <select onChange={(e) => changeLanguage(e)}>
          <option value="en" id="en">English</option>
          <option value="cn" id="cn">中文</option>
        </select>
      </div>
    </div>

以及对应的换语言功能:

    const changeLanguage = event => {
        i18n.changeLanguage(event.target.value);
      };        

看来您需要将 onChange 放在 select 而不是选项上。

所以:

  <div className="select" onChange={(e) => changeLanguage(e)}>
    <select>
      <option value="en">English</option>
      <option value="cn">Chinese</option>
    </select>
  </div>
</div>

您可以从那里使用 React 引用来获取 select 的值。 https://reactjs.org/docs/refs-and-the-dom.html

获取 select 字段的值并编写一个名为 changeLanguage 的函数,该函数具有一些三元操作来检测当前 select 的语言以及触发语言更改的逻辑。即

if(selectId.val === 'en') //do some code

您应该将 onChange 处理程序放在 select 元素而不是 option 上,这里是处理选项更改和更改状态的反应代码

import React, { Component } from "react";

export default class App extends Component {
  state = {
    lang: "eng" // set english by default
  };

  onSelect = ev => {
    this.setState({ lang: ev.target.value });
  };

  render() {
    return (
      <div className="navbar-item">
        <div className="select">
          <select onChange={this.onSelect}>
            <option value="eng">English</option>
            <option value="ch">Chinese</option>
          </select>
        </div>
      </div>
    );
  }
}