使用反应表中的选择下拉列表过滤数据

问题描述 投票:0回答:1

我尝试通过选择下拉列表使用表值之一来过滤表的数据。我使用JSON导入所有表数据。我以某种方式编写了一些代码来过滤数据,但是没有用。请帮忙。我想要的是当用户选择具有答案值的“答案”选项数据时显示其他生皮,反之亦然。这是相同的沙箱链接(https://lndnf.csb.app/)。

这里是表的组件代码。

 class Inquiry extends React.Component{
     constructor(props)
     {
        super(props);
         this.state={
             searchInquiries:null,
             answerStatus:'all'

         }
     }
     handleSearch=(event) =>
     {
       this.setState({searchInquiries:event.target.value});
     }
     handleAnswer=(event) =>
     {
         this.setState({answerStatus:event.target.value});
     }
     render()
     {
        const inquiries = InquiresList.filter((data)=>{
            if(this.state.searchInquiries == null)
            {
                return data;
            }
            else if(data.user_code.toLowerCase().includes(this.state.searchInquiries.toLowerCase())){
                        return data;
                }
            return null;
          })
          inquiries.filter((data) =>
          {
              if(this.state.answerStatus.toLowerCase() === 'all')
              {
                  return data;
              }
              else if(data.answered.toLowerCase()=== 'answered' && this.state.answerStatus.toLowerCase() === 'answered')
              {
                  return data;
              }
              else if(data.answered.toLowerCase()=== 'unanswered' && this.state.answerStatus.toLowerCase() === 'unanswered')
              {
                  return data;
              }
          })
         return(
            <div className="col-md-12 bg-gray" style={{padding:'30px'}}>
                <div className="row" style={row}>
                <h3 className="roboto paragraph mgb-30">Inquiries List</h3>
                </div>
                <div className="row border-radius-10 default-shadow" style={row}>
                <div className="col-md-12 bg-white border-radius-10" style={padding}>
                    <div className="row">
                    <div className="col-md-6 flex all-center">
                    <i className="i fa fa-search table-search-icon"></i>
                        <input type="text" onChange={this.handleSearch} className="form-control" style={{borderRadius:'30px'}} placeholder="Search" />
                    </div>
                    <div className="col-md-6 flex flex-end" style={row}>
            <select name="inquiry-filter" onChange={this.handleAnswer} className="inquiry-filter">
                <option value="all">All</option>
                <option value="answered">Answered</option>
                <option value="unanswered">Unanswered</option>
            </select>
            </div>
                    </div>

                </div>
                <div className="col-md-12 bg-white" style={{padding:'0px'}}>
                    <table className="table table-striped table-hover table-bordered">
                        <thead>
                            <tr>
                                <td><p className="paragraph" style={marginBottom}>Created</p></td>
                                <td><p className="paragraph" style={marginBottom}>User Code</p></td>
                                <td><p className="paragraph" style={marginBottom}>Email</p></td>
                                <td><p className="paragraph" style={marginBottom}>Subject</p></td>
                                <td><p className="paragraph" style={marginBottom}>Answer</p></td>
                            </tr>
                        </thead>
                        <tbody>

                        {
                    inquiries.map(inquiry =>(
                        <tr>

                        <td>
                            <h3 className="paragraph">{inquiry.created_date}</h3>
                        </td>
                        <td>
                            <h3 className="paragraph" style={marginBottom}>{inquiry.user_code}</h3>

                        </td>
                        <td>
                            <p className="paragraph" style={marginBottom}>{inquiry.email}</p>
                        </td>
                        <td>
                            <p className="paragraph" style={marginBottom}>{inquiry.subject}</p>
                        </td>

                         <td>
                         <div className="custom-control custom-checkbox">
                             {
                              inquiry.answered ?   <input type="checkbox" checked className="custom-control-input" id={"answer-status-"+inquiry.id} name={"answer-status-"+inquiry.id} />
                              : <input type="checkbox" className="custom-control-input" id={"answer-status-"+inquiry.id} name={"answer-status-"+inquiry.id} /> 
                              }
                           <label className="custom-control-label" for={"answer-status-"+inquiry.id}></label>
                         </div>
                         </td>
                         </tr>

                    ))
                }

                        </tbody>
                    </table>
                </div>

            </div>
            </div>

         )
     }

 }


 export default Inquiry;

reactjs typescript react-table
1个回答
0
投票

我想您最后遗漏了过滤数据:

var inquiries = InquiresList.filter((data)=>{
              // your code for filter
          });

// filter will not modify the existing array, it returns updated array
// so you need to assign it, to get updated values
inquiries = inquiries.filter((data) =>  // <----------- HERE
{
     // your code for filter
})

工作演示:

Edit zealous-cohen-2z67y

© www.soinside.com 2019 - 2024. All rights reserved.