代码之家  ›  专栏  ›  技术社区  ›  Searene

在语义UI React的下拉列表中以编程方式选择项目

  •  1
  • Searene  · 技术社区  · 8 年前

    我使用语义UI React创建了一个下拉列表,让用户选择颜色。

    enter image description here

    代码如下。

    import React, { Component } from 'react';
    import { Dropdown } from 'semantic-ui-react';
    
    const colorOptions = [{
      text: 'red',
      value: 'red'
    }, {
      text: 'blue',
      value: 'blue'
    }, {
      text: 'custom',
      value: 'custom'
    }];
    
    const Foo = () => (
      <Dropdown
        placeholder='color'
        search
        selection
        options={colorOptions} />
    )
    
    export default Foo
    

    假设当前选定的颜色为红色。现在用户单击 custom . 然后会出现一个对话框,显示更多颜色。对话框中有两个按钮。确定并取消。

    我想要的是,当用户点击 Cancel ,所选颜色将恢复为前一种颜色, red 而不是 风俗 . 是否可以通过语义UI react实现?

    1 回复  |  直到 8 年前
        1
  •  3
  •   Hemerson Carlin    8 年前

    您可以使用 state 为此。

    我假设您有另一个组件正在渲染 Foo 组件(因为您将其代码粘贴为无状态函数)

    1. 使用 onChange 在您的 Dropdown 组件,以便跟踪当前值。您是否需要更多关于如何 onChange公司 工厂检查其 docs .

    例如:

    const Foo = (onChange, value) => (
      <Dropdown
        placeholder='color'
        search
        selection
        options={colorOptions}
        onChange={onChange}
        value={value}
      />
    )
    
    1. 在每个 onChange公司 ,将此值保存到状态,并保留前一个值的副本。自从 setState asynchronous 您可以通过以下方式轻松完成此操作:

    例子:

    handleChange(event, data) {
      this.setState(prevState => ({
        previousValue: prevState.value,
        value: data
      }))
    }
    
    1. 单击“取消”按钮时,只需将下拉列表的值还原为上一个值即可。

    例子:

    onCancel() {
      this.setState(prevState => ({
        value: prevState.previousValue
      }))
    }
    
    1. 在…上 render 始终通过 value Foo公司 组成部分

    例子:

    <Foo onChange={handleChange} value={this.state.value} ... />