【问题标题】:ReactJS - based on input value - auto set the selection optionReactJS - 基于输入值 - 自动设置选择选项
【发布时间】:2020-07-11 11:06:34
【问题描述】:

我的目标是,当您在输入字段中输入:1 时,选择下拉菜单应将值设置为:First Value。反之亦然,当输入字段的值为 2。所以这应该发生在输入字段的 onKeyUp 事件上,根据这些输入字段值,选择下拉菜单应该自动选择到其适当的选择选项

handleKeyUp(e) {
  if (inputValue == 1) {
    this.setState({ mySelectOptions: e.target.value });
  }
}

render() {
  return (
    <div className="formID">
      <form>
        <div className="inputSection">
          <input
            name="myInput"
            onChange={e => this.setState({ myInput: e.target.value })}
            onKeyUP={this.handleKeyUp}
          />
        </div>
        <div className="selectOptions">
          <select
            value={this.state.value}
            onKeyUp={e => this.setState({ mySelectOptions: e.target.value })}
          >
            <option value="firstValue">First Value</option>
            <option value="secondValue">Second Value</option>
          </select>
        </div>
      </form>
    </div>
  );
}

【问题讨论】:

  • 你能解释一下这个问题吗?你的目标是什么?有什么问题?
  • 目标是,当您在输入字段中键入:1,然后选择下拉应将值设置为:第一个值。反之亦然,当输入字段的值为 2。所以这应该发生在输入字段的 onKeyUp 事件上,基于这些输入字段值,选择下拉菜单应该自动选择到其适当的选择选项。谢谢。

标签: reactjs


【解决方案1】:

我更新了您的代码,并且它按照您在描述中的说明工作,您的代码存在一些问题,例如 onKeyUP 应该是 onKeyUp,而不是在发生更改时调用 setState 函数,这样更好要使用handleKeyUp,我建议在编写代码时使用控制台/IDE 在开发过程中指导您,而不是想知道为什么事情没有按预期工作。

import React from "react";
import "./styles.css";

export default class App extends React.Component {
  constructor(props) {
    super(props);
    this.state = {
      selectedOption: "firstValue"
    };
    this.handleKeyUp = this.handleKeyUp.bind(this);
  }

  handleKeyUp(value) {
    console.log(value);
    if (value === "1") {
      this.setState({ selectedOption: "firstValue" });
    } else {
      this.setState({ selectedOption: "secondValue" });
    }
  }

  render() {
    return (
      <div className="formID">
        <form>
          <div className="inputSection">
            <input
              name="myInput"
              defaultValue="1"
              onKeyUp={e => this.handleKeyUp(e.target.value)}
            />
          </div>
          <div className="selectOptions">
            <select
              value={this.state.selectedOption}
              onChange={e => this.setState({ selectedOption: e.target.value })}
            >
              <option value="firstValue">First Value</option>
              <option value="secondValue">Second Value</option>
            </select>
          </div>
        </form>
      </div>
    );
  }
}

【讨论】:

  • 由于某种原因在此“未捕获的类型错误:无法读取未定义的“值”的属性上收到以下错误消息。指向这行代码的错误:onKeyUp={e => this.handleKeyUp(e.target.value)}
  • 我在沙盒上运行它没有出现这个问题codesandbox.io/s/exciting-shannon-nhh2j
  • 请将e.target.value 替换为e.target,然后再试一次。
  • 最终作为原始版本工作:e.target.value。它只是页面需要清除 cookie/缓存。如果您不介意,另一个快速问题:) 迭代此数组列表不起作用:{ this.state.myData} 的 json 格式如下所示:lists:[{ id: '1', item_name: 'Item1'', other_listings: {item_id: '3', item_category: 'Catetegory1'} }] render() return (
    {this.state.myData.map((info) =>( ))}
    id number {id}
    )
猜你喜欢
  • 1970-01-01
  • 2020-08-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-01-14
  • 2018-08-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多