第一次拿不到数据,第二次拿到的是第一次的数据,后面每次都是拿到前一次的数据

发布于 2022-09-07 21:38:31 字数 1602 浏览 13 评论 0

第一次拿不到数据,第二次拿到的是第一次触发的数据,后面每次拿到的都是前一次触发的数据

取数据:

  getExpandData = (param) => {
    getModelVersion(param).then((result) => {
      if (result) {
        this.setState({
          subData: result, // 过滤之后的数据
        });
      }
    });
  };

嵌套的子表格展开:

 expandFunction = (expanded, record) => {
    const { showListDom } = this.state;
    if (record) { // 未展开
      const param = {
        modelId: record.id,
      };
      this.getExpandData(param); // 进不去
      const subList = this.state.subData.map((v) => {
        return {
          ...v,
          todo: v.status,
        };
      });
      const dom = (
        <Table
          columns={this.detailsColumns}
          onChange={this.handleSubTableChange}
          dataSource={subList}
          rowKey={subList.id}
          pagination={false}
        />);
      const Id = record.id;
      const item = {};
      item[Id] = dom;
      this.setState({
        showListDom: {
          ...showListDom,
          ...item,
        },
      });
    }
  };
  

render方法内:

<Table
    dataSource={this.state.SampleData}
    rowKey={record => record.id || record.key}
    columns={columns}
    onChange={this.handleStandardTableChange}
    pagination={this.state.pagination}
    loading={this.state.loading}
    expandedRowRender={(record) => { return this.state.showListDom[record.id] || null; }}
    onExpand={(expanded, record) => this.expandFunction(expanded, record) || null}
  />
      

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

以为你会在 2022-09-14 21:38:31

...肯定不行啊,

getExpandData = (param) => {
    **getModelVersion(param)**.then((result) => {//异步的
      if (result) {
        this.setState({
          subData: result, // 过滤之后的数据
        });
      }
    });
  };
const subList = this.state.**subData**.map((v) => {//其实还是上一次的数据,因为还没异步完
    return {
      ...v,
      todo: v.status,
    };
  });

解决办法1,改造,回调进去

getExpandData = (param,cb) => {
    getModelVersion(param).then((result) => {
        if (result) {
            this.setState({
                subData: result, // 过滤之后的数据
            },cb);
        }
    });
  };
 expandFunction = (expanded, record) => {
    const { showListDom } = this.state;
    if (record) { // 未展开
      const param = {
        modelId: record.id,
      };
      this.getExpandData(param,()=>{
          const subList = this.state.subData.map((v) => {
            return {
              ...v,
              todo: v.status,
            };
          });
          const dom = (
            <Table
              columns={this.detailsColumns}
              onChange={this.handleSubTableChange}
              dataSource={subList}
              rowKey={subList.id}
              pagination={false}
            />);
          const Id = record.id;
          const item = {};
          item[Id] = dom;
          this.setState({
            showListDom: {
              ...showListDom,
              ...item,
            },
          });
      });
    }
  };

解决办法2,用async await改造,我就不写了

征棹 2022-09-14 21:38:31

原因就是getExpandData是异步的, 你没有等待它返回数据就继续执行后面代码了。

解决方式就是getExpandData的回调函数中拿到数据后继续render

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文