javascript - React - 如何使用本地 .json 文件中的数据根据​​另一个选择菜单的值填充一个选择菜单

标签 javascript json reactjs

我尝试使用 React v16 中本地 .json 文件中的数据,根据选择菜单“对象类型”的值更改选择菜单“对象子类型”的内容

例如: 如果我在“对象类型”选择菜单中选择一种植物,那么它会在“对象子类型”选择菜单中显示芦荟、仙人掌和玫瑰。

我有一个data.json

{
  "object": [
    {
      "objectType": "Plant",
      "objectSubtype": ["Aloe","Cactus","Rose"]
    },
    {
      "objectType": "Animal",
      "objectSubtype": ["Cat","Dog","Dolphin"]
    },
    {
      "objectType": "Stone",
      "objectSubtype": ["Granite","Marble","Travertine"]
    }
  ]
}

我有 Object.js

import React, { Component } from "react";

class Object extends Component {
  constructor() {
    super();

    this.state = {
      objectType: "",
      objectSubtype: ""
    };
    this.onChange = this.onChange.bind(this);
  }
  onChange(e) {
    this.setState({ [e.target.name]: e.target.value });
  }

  render() {
    return (
      <form>
        <div className="form-group">
          <select
            id="objectType"
            multiple={false}
            className="form-control"
            value={this.state.objectType}
            onChange={this.onChange}
          >
            <option>Select an object type</option>
          </select>
        </div>
        <div className="form-group">
          <select
            id="objectSubtype"
            multiple={false}
            className="form-control"
            value={this.state.objectSubtype}
            onChange={this.onChange}
          >
            <option>Select an object subtype</option>
          </select>
        </div>
      </form>
    );
  }
}
export default Object;

我的目标是使用本地文件 data.json 中的数据填充两个选择菜单并根据选择菜单“对象类型”中的值填充第二个选择菜单“对象子类型”。怎么可能?

最佳答案

对于第一个选择“objectType”,设置如下选项

let objectOption = []
data.object.forEach(x=>objectOption.push(x.objectType))

并循环遍历第一个选择选项。 在此选择中更改值时,您需要设置第二个状态变量,即 objectSubtype

为此,您可以将 onChangeHandler 传递给您的第一个 Select 并从此处设置第二个状态。

onObjectChange = (value) => {
  // TODO: handle for null value as well
  let subTypeValue = data.object.filter(x=>x.objectType===value)[0].objectSubtype
  this.setState({objectType:value, objectSubtype:subTypeValue})
}

你的第二个 Select 可以有自己的 onChangeHandler,可以很简单

onSubObjectChange = (value) => {
  this.setState({objectSubtype:value})
}

关于javascript - React - 如何使用本地 .json 文件中的数据根据​​另一个选择菜单的值填充一个选择菜单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55866738/

相关文章:

javascript - 如何从 PHP (JSON) 读取数组并通过 JS 填充少量输入

json - 使用 Set-AzureStorageBlobContent 或 ConvertTo-Json cmdlet 将文件上传到 Azure 存储 blob 时能否指定编码类型?

html - 将 css 文件绑定(bind)到 ReactJs 中的组件,例如 Angular 2+

javascript - EasyRTC 一般身份验证错误

javascript - JS 中函数的原型(prototype)?

javascript - 弄清楚 AJAX POST 函数时遇到问题

javascript - 在 JavaScript 中查找多维 JSON 对象不同级别的重复值

javascript - 为什么自动对焦在 ReactJS 和 antd 中不起作用?

javascript - 如何返回对象?

javascript - 扩展 `super()` 时使用 `Object`