【问题标题】:React Dropdown menu not showing the selected element反应下拉菜单未显示所选元素
【发布时间】:2021-02-17 13:35:43
【问题描述】:

我是 React 的初学者。在下面的代码中,我基本上是使用flask api从数据库中读取数据,并根据从动态下拉列表中选择的选项返回数据,该下拉列表还从另一个flask api中选择要显示的选项。

import React, {Component} from 'react'
import axios from 'axios';
import Select from 'react-select';

class ListUser extends Component{


  constructor(props){
    super(props)

    this.state={
        userList:[],
        selected_eml:[],
        selected_email:'',
        user_list:[]
    }
  }

  componentDidMount(){

        axios.get('/getuserList',{crossDomain: true})
          .then(response => {
              if (response.status === 200 && response != null){
                console.log("user list",response.data)
                  this.setState({ userList : response.data,selected_eml:response.data});
                }
            })
  }        

  selectedUserHandler(event){
    this.setState({selected_eml: event.label})
    let email = event.value
    axios.get('/getUserlisting/'+email).then(response=>{
      if (response.status === 200 && response != null){
        this.setState({ user_list : response.data });
        console.log(response.data)
      } else {console.log("error")}
    })
   } 

componentDidUpdate(){
    let email = this.state.selected_eml
    axios.get('/getUserlisting/'+email).then(response=>{
      if (response.status === 200 && response != null){
        if(JSON.stringify(this.state.user_list) != JSON.stringify(response.data)){
        this.setState({ user_list : response.data, selected_email:response.data });
        console.log(response.data)
      }
      } else {console.log("error")}
    }) 
  }    

  render(){
    var filter_user_list=[]

    for (var key in this.state.selected_eml) {
            console.log(this.state.selected_eml[key]['value'])
            filter_user_list.push(this.state.selected_eml[key]['value'])
          }
          console.log(filter_user_list)

    return(
    <div>
      <div className="App">
        <table><tbody>
                  <tr>
                    <th ><label> Email </label></th>
                     <td style= {{ width:"300px"}}>
                      <Select
                        placeholder= "Select User Email"
                        options={this.state.userList} value={this.state.selected_eml}
                        onChange={this.selectedUserHandler.bind(this)}
                       />
                      </td>
                  </tr>
          </tbody></table>
        </div>
        <br />
        <br />
        <div>
          <h4 align="center">User List</h4>
          <table className="table table-striped" style={{ marginTop: 10, border : 1 }} >
            <thead>
              <tr>
                <th>User ID</th>
                <th>Email</th>
                <th>P ID</th>
                <th>P Name</th>
              </tr>
            </thead>
            <tbody align="center">
             { this.state.user_list.map((mp, index)=><tr>
                <td> {mp.user_id} </td>
                <td> {mp.email} </td>
                <td> {mp.id} </td>
                <td> {mp.name} </td>
              </tr>) }
            </tbody>
          </table>
        </div>
        </div>
      )

    }
}    

export default ListUser;

我面临的问题是,当我从下拉列表中选择一个选项时,它会很好地返回数据,但不会显示在下拉占位符栏中选择的选项。我尝试在 selectedUserHandler 函数中传递 selected_emlbind(this) 并在 onChangegetOption 方法中传递,但没有运气。

此外,如果有任何方法可以使代码更高效并提高质量,欢迎提出意见。

【问题讨论】:

  • 我认为你的括号 (mp, index)=&gt;&lt;tr&gt;&lt;tr&gt; 之前有一个错误,必须有一个 (。另一个结束在这里&lt;/tr&gt;)) }
  • 代码运行良好,没有返回错误或其他任何东西,但我会尝试你的建议。

标签: javascript reactjs drop-down-menu


【解决方案1】:

Select 的选定值需要具有{value: sth, label: sth} 的对象格式才能显示在选择容器中。由于您已将 event.label 分配给 selected_eml,因此它不会显示在选择容器中。要解决此问题,您只需:this.setState({selected_eml: event})

【讨论】:

  • 我试过了,它现在显示所选选项,但不再显示所选选项返回的数据。我不明白为什么会这样......
  • “它不再显示数据”是什么意思?哪些数据?
  • 这是一个错字,我编辑了我的评论。我所指的数据是在从下拉列表中选择一个选项时获取的,并以表格格式显示。
  • 我认为这是因为在您的 componentDidUpdate 中,您已将 selected_eml 作为电子邮件传递,它现在是一个对象。您需要传递 selected_eml.value 来解决此问题。
  • 您对如何改进代码有什么建议吗?如果你能建议我一些学习反应的材料,我真的很感激:)
猜你喜欢
  • 1970-01-01
  • 2021-03-07
  • 2020-11-12
  • 2023-04-04
  • 2023-04-11
  • 1970-01-01
  • 1970-01-01
  • 2020-12-29
相关资源
最近更新 更多