javascript - react : How to refresh the data in the table after button click

标签 javascript reactjs graphql react-apollo apollo-client

我正在尝试设置一个刷新按钮,以便当最终用户创建新票证时,我应该能够在按下刷新按钮时看到新创建的票证。我正在利用 Apollo 客户端从 graphql 服务器获取数据。我想知道我应该如何刷新我尝试过的 table forceUpdatethis.setState() ,我通过输入 {Math.random()} 来验证它是否有效。然而,在渲染函数中,它不会刷新并提供新数据,也尝试将刷新按钮放在button.js中,但问题仍然存在。 window.location.reload()有效,但这不是我想要的,有没有什么 react 可以像任何生命周期 Hook 一样,我尝试过:

componentWillReceiveProps(nextProps) {
  if(this.props.ticket !== nextProps.ticket) {
     console.log(this.props.ticket)
  }
}

在 table.js 中,但它没有起作用,或者我必须使用一些 Apollo 客户端 API。请建议,先谢谢了。

App.js

class App extends Component {
  constructor(props) {
    super(props);
    this.handleRefresh =  this.handleRefresh.bind(this);

  }

  handleRefresh()  {
    this.forceUpdate();
  }

  render() {
    const { data: {loading, getTickets}} = this.props;
    if(loading) {
      return <h4>Loading..</h4>
    }

    const Data = getTickets.map((ticket, id) => {
       return <Table ticket={ticket} key={id} />
    })


    return (
      <div className="App">
        <header className="App-header">
          <Header />
          <Button className="lookup" bsStyle="info" bsSize="xsmall" 
onClick={this.handleRefresh}><h5>lookup 1</h5></Button><br/><br/>
              <div className="container" style={{overflowX:"auto"}}>
                <div className="table-responsive">
                  <table className="table table-bordered table-hover">
                          <thead>
                            <tr>
                              <th>TicketID</th>
                              <th>Name</th>
                              <th>Comment</th>
                              <th>EmpID</th>
                            </tr>
                          </thead>
                          <tbody>
                              {Data}
                          </tbody>
                    </table>
               </div>
               <h4>Random number : {Math.random()}</h4>
              </div>
            </header>
          </div>
        );
    }
    }

    export default compose(
     graphql(GetTickets)
    )(App);

表.js

import React, { Component } from 'react';
import PropTypes from 'prop-types';


class Table extends Component {
    constructor(props) {
        super(props);

    }

    render() {
        return (
          <tr>
                <td>{this.props.ticket.ticketID}</td>
                <td>{this.props.ticket.name}</td>
                <td>{this.props.ticket.comment}</td>
                <td>{this.props.ticket.EmpID}</td>
          </tr>

        )
    }
}


Table.propTypes = {
    ticketID: PropTypes.number,
    name: PropTypes.string,
    EmpID: PropTypes.number,
    comment: PropTypes.string
}


export default Table;

最佳答案

graphql 提供了一个 refetch 属性,用于在任何时候重新查询数据库。只需作为 Prop 传递给您的子组件,并在单击刷新按钮时调用该函数即可。请参阅文档: https://www.apollographql.com/docs/react/essentials/queries.html#refetching

关于javascript - react : How to refresh the data in the table after button click,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53822446/

相关文章:

javascript - 使用 React 函数组件创建空数组变量

javascript - 将XHR请求转换为axios以从GraphQL服务器请求数据

javascript - 使用 JavaScript 在 HTML 表格中添加行

javascript - 单击并滚动顶部

reactjs - 在 React 中,使用 TypeScript,如何使用 RefForwardingComponent 和 forwardRef 将 ref 传递给自定义组件?

typescript - 如何使用 Apollo Rover + Codegen 生成 typescript schema 类型

java - 如何使用graphql-java上传文件?

javascript - JavaScript 无法在 Android 中运行

javascript - 反正则表达式 javascript

javascript - 需要为日历创建自定义导航标题