【问题标题】:How to use onChange method in semantic react dropdown如何在语义反应下拉列表中使用 onChange 方法
【发布时间】:2018-06-12 08:28:23
【问题描述】:

有人可以帮助我了解如何在下拉列表中使用 onChange(语义 UI React)。我正在阅读文档,但仍然不明白。它确实有 onChange 道具。

onChange(event: SyntheticEvent, data: object)

如何使用它?比如,我有方法dropdownmethod()

edit - 实施了建议,但没有奏效。我认为在您的建议中,您没有绑定该功能。但是,我绑定了函数。

  onChangeFollower(event,data){

    console.log("on change follower",data.text)

  }

  render() {
    console.log("this.props",this.props)
    var onChangeFollower = this.onChangeFollower.bind(this)

    return (
      <div>
        <h2>project settings are here</h2>
        <h2>Add new Member</h2>

        <Dropdown onChange={onChangeFollower}
        placeholder='Select Member'
        fluid search selection options={arr} />

        <h2>List of members</h2>
        {lr}

      </div>

【问题讨论】:

    标签: javascript reactjs semantic-ui-react


    【解决方案1】:

    如文档中所述,您只需传递您的方法的引用,然后您将获得 2 个参数:

    1. 原生事件

    2. 所选选项的对象

    Here is a running example

    这是一个代码 sn-p(它使用 CDN,但会引发一些调试警告,因此请忽略它们)

    const { Dropdown } = semanticUIReact;
    
    const languageOptions = [
      { key: 'eng', text: 'English', value: 'eng' },
      { key: 'spn', text: 'Spanish', value: 'spn' },
      { key: 'rus', text: 'Russian', value: 'Russian' },
    ]
    
    class App extends React.Component {
    
      constructor(props) {
        super(props);
        this.state = {
          searchQuery: '',
          selected: null
        }
      }
    
      onChange = (e, data) => {
        console.log(data.value);
        this.setState({ selected: data.value });
      }
    
      onSearchChange = (e, data) => {
        console.log(data.searchQuery);
        this.setState({ searchQuery: data.searchQuery });
      }
    
      render() {
        const { searchQuery, selected } = this.state;
        return (
          <div>
            <Dropdown
              button
              className='icon'
              fluid
              labeled
              icon='world'
              options={languageOptions}
              search
              text={searchQuery}
              searchQuery={searchQuery}
              value={selected}
              onChange={this.onChange}
              onSearchChange={this.onSearchChange}
            />
          </div>
        );
      }
    }
    
    ReactDOM.render(<App />, document.getElementById('root'));
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/semantic-ui/2.2.9/semantic.min.css"/>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react.min.js"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react-dom.min.js"></script>
    <script src="https://cdn.jsdelivr.net/npm/semantic-ui-react@0.77.1/dist/umd/semantic-ui-react.min.js"></script>
    <div id="root"></div>

    编辑
    作为您评论的后续行动。

    我检查了示例。即使在那里当我输入一些东西时,它也不会显示给我 控制台中的任何内容

    当搜索输入发生变化时,您谈论的不是select 中的onChange
    您可以使用具有相同参数的onSearchChange。 (我已经更新了示例)

    【讨论】:

    • 好吧,它没用。我已经更新了线程。我绑定了函数。但是,当我在下拉菜单中输入文本时,什么也没有发生。
    • 我检查了示例。即使在我输入内容时,它也不会在控制台中显示任何内容
    • @AnkurSharma 检查我的更新。我以为您想登录每个已选择的选项,而不是更改搜索输入。
    【解决方案2】:

    我已经实现如下

    React hooks 函数如下,如果你喜欢你也可以传递 handleOnChange 作为 props

    const RenderDropdown = ({optionsArray}) => {
    
       const handleOnChange = (e, data) => {
          console.log(data.value);
       }
    
       return (
         <Dropdown
            placeholder='Please select'
            fluid
            selection
            options={optionsArray}
            onChange={handleOnChange}
          />
       );
    }
    

    选项数组如下

    const optionsArray = [
      {
        key: 'male',
        text: 'Male',
        value: 'male',
        image: { avatar: true, src: 'https://semantic-ui.com/images/avatar/small/elliot.jpg' },
      },
      {
        key: 'female',
        text: 'Female',
        value: 'female',
        image: { avatar: true, src: 'https://semantic-ui.com/images/avatar/small/stevie.jpg' },
      }
    ]
    

    【讨论】:

    • 我的问题是,你怎么能访问handleOnChange函数中的image属性呢?如果有人想要访问更多属性而不仅仅是价值,这怎么可能?
    • 编辑我上面的问题,如果问题出现在其他人身上,只需拥有一个具有多个属性的对象值,然后访问每个对象属性。
    【解决方案3】:

    使用 onChange 事件检测下拉列表的变化

    onSearchChange={(e, v) => {
            changeMethod(e, v)
    }}
    

    使用 onSearchChange 事件检测搜索输入

      onSearchChange={(e, v) => {
               searchMethod(e, v)
        }}
    

    您必须在页面顶部将 searchMethod 和 changeMethod 定义为 const。

    【讨论】:

      【解决方案4】:

      下面是你的工作代码:

      onChangeFollower(event, data){
          console.log("on change follower",data.text)
        }
      
      render() {
          console.log("this.props",this.props)
          return (
            <div>
              <h2>project settings are here</h2>
              <h2>Add new Member</h2>
      
              <Dropdown onChange={this.onChangeFollower}
              placeholder='Select Member'
              fluid search selection options={arr} />
      
              <h2>List of members</h2>
              {lr}
      
            </div>
          )
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-11-03
        • 2016-04-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多