【问题标题】:React : Search bar capturing key but not showing dataReact:搜索栏捕获关键但不显示数据
【发布时间】:2021-03-23 03:28:47
【问题描述】:

我是一个完全的初学者。我有以下 React 组件,我需要在其中显示一个包含数据的表格,并使用生成的 API 对它执行搜索,该 API 使用 Laravel 作为后端。

显示数据效果很好,直接从 API 链接搜索数据有效,但是当尝试对表格执行搜索时,所有显示的数据都消失了,没有结果显示。 p>

如果有帮助,在 chrome 的控制台中输入以下内容

SyntheticEvent {dispatchConfig: {…}, _targetInst: FiberNode, nativeEvent: InputEvent, type: "change", target: input.form-control, …}

SyntheticEvent {dispatchConfig: {…}, _targetInst: FiberNode, _dispatchInstances: FiberNode, nativeEvent: InputEvent, _dispatchListeners: ƒ, …}

我相信我在handleSearchChange 有问题

class Patient extends React.Component {
    constructor(props) {
        super(props)          
        
        this.state = {
            patients : [],
        };

        this.handleSearchChange = this.handleSearchChange.bind(this);
    }

       // Problem in this one
        handleSearchChange(key){   
        console.log(key);
        fetch("api/patients/search?q="+key)
        .then(response => {
          this.setState({
            patients:[]
          }); 
        })
      } 
      
        componentDidMount() {
            axios.get('api/patients')
            .then(response => {
              this.setState({
                patients: response.data})
            })
            .catch(err => console.log(err));                
        }

        render() {
        return (
          <div>
            <Container>
              <div>
                  <input
                    type="text"
                    className="form-control"
                    placeholder="Search..."
                    onChange= onChange={this.handleSearchChange}
                  /> 
              </div>
    
              <Table>
                <Thead>
                  <Tr>
                    <Th>ID</Th>
                    <Th>FIRST NAME</Th>
                    <Th>LAST NAME</Th>
                  </Tr>
                </Thead>
    
                <Tbody>
    
                  {this.state.patients.reverse().map((patient) => (
                    <Tr>
                      <Td>
                        {patient.id}
                      </Td>
                      <Td>
                        {patient.firstname}
                      </Td>
                      <Td>
                        {patient.lastname}
                      </Td>
                    </Tr>
                  ))}
    
                </Tbody>
    
              </Table>
            </Container>
          </div>
        );
      }
    }
    
    export default Patient;

【问题讨论】:

    标签: javascript reactjs


    【解决方案1】:

    这是你输入的问题

                      <input
                        type="text"
                        className="form-control"
                        placeholder="Search..."
                        onChange= onChange={this.handleSearchChange}
                      /> 
    

    您需要从输入中捕获 onChange 事件,获取值然后将其发送到 handleSearchChange 函数,如下所示:

                      <input
                        type="text"
                        className="form-control"
                        placeholder="Search..."
                        onChange={e => this.handleSearchChange(e.target.value)}
                      /> 
    

    你可能会问为什么e.target.value,它是事件对象,你可以通过console.log查看更多细节。

    编辑:在handleSearchChange函数中,你还需要setState从响应中得到的患者,就像你在componentDidMount方法中所做的一样

    【讨论】:

    • 谢谢。我按照你的建议做了,现在我有以下错误TypeError: Cannot read property 'map' of undefined
    • 那是因为this.state.patients 未定义,你应该检查你的api响应。在映射之前确保 this.state.patients 是一个数组也是最佳实践,通常这就是我所做的Array.isArray(this.state.patients) &amp;&amp; this.state.patients.map...
    • 是的,它正在工作。如果你不介意问,你是怎么想出e.target.value
    • 不用e =&gt; this.handleSearchChange(e.target.value),你可以e =&gt; console.log(e)查看事件对象有哪些属性和方法
    猜你喜欢
    • 2014-06-06
    • 2021-06-21
    • 2020-01-04
    • 2021-01-25
    • 2017-03-31
    • 1970-01-01
    • 1970-01-01
    • 2019-02-05
    • 1970-01-01
    相关资源
    最近更新 更多