【问题标题】:React - semantic ui dropdown with objectReact - 带有对象的语义 ui 下拉菜单
【发布时间】:2019-03-14 21:05:47
【问题描述】:

我正在映射一组对象并在下拉选择中使用名称 w/semantic-ui-react

我有一些模拟数据

mock.onGet("/dataschemas").reply(200, {
  data: [
    {
      id: "2147483599",
      selfUri: "/dataschemas/2147483599",
      name: "Book Catalog"
    },
    {
      id: "2147483600",
      selfUri: "/dataschemas/2147483600",
      name: "Business Articles"
    }
  ]
});

在 cDM 中,我将对象的状态更新为 dataschemas

  async componentDidMount() {
    await this.getSchemas();
  }

  getSchemas = async () => {
    try {
      const { data } = await axios.get("/dataschemas");
      console.log(data);
      const dataschemas = data.data;

      this.setState({ dataschemas: dataschemas });

      console.log("This is the dataschema list:", dataschemas);
    } catch (error) {
      console.error(Error(`Error fetching results list: ${error.message}`));
    }
  };

我的更改处理函数如下所示:

handleSchemaChange = (e, { value }) => this.setState({ name: value });

然后在渲染中我使用<Dropdown> 组件

render() {
    const { dataschemas } = this.state;
    return (
      <div>
        <div>
          <label>Select a dataschema: </label>
          <Dropdown
            placeholder="Select data schema"
            clearable
            fluid
            selection
            multiple={true}
            options={dataschemas}
            header="PLEASE SELECT A DATASCHEMA"
            value={dataschemas.filter(({ name }) => name === this.state.name)}
            onChange={this.handleSchemaChange}
          />
        </div>
      </div>
    );
  }

我无法让数据模式names 显示在下拉列表中,也无法在进行选择时更新标签。我不知道我是否缺少道具或没有正确更新状态,有什么想法吗?

代码沙盒here

【问题讨论】:

    标签: javascript reactjs semantic-ui


    【解决方案1】:

    按照https://react.semantic-ui.com/modules/dropdown/ 中的规定,您应该使用以下结构在下拉菜单中显示对象。

    {
      "key": "",
      "text": "",
      "value": ""
    }
    

    示例:将其用作下拉列表中的选项值

    options={dataschemas.map(ds => {
                  return {
                      key: ds.id,
                      text: ds.name,
                      value: ds.selfUri
                  }
                })}
    

    【讨论】:

    • 啊,我错过了。知道如何在选择后更新状态吗?
    • 只需将值设为value:ds.name 即可在状态中获取更新后的名称。
    • 我知道你在一年前回答了这个问题,但是 value 和 text 有什么区别?
    • @KMC 我认为文本意味着要显示的文本,并重视将通过 http 以下拉表单形式发送的实际表单值。我建议你检查代码,该项目是开源的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多