0

我有一个由三个参数生成的报告。一个用户和 2 个范围日期字段。

例如: 在此处输入图像描述

填写完所有字段后,可以通过Gerar按钮生成报告。

例如,当生成时: 在此处输入图像描述

我不知道如何处理的问题现在发生了。当任何字段的值发生更改时,报表会再次呈现。以及报头报告的MotoristaPeríodo字段的值,因为这些值来自参数。

这是我的代码:

useState参数挂钩:

const [selectedDriver, setSelectedDriver] = useState({});
const [startDate, setStartDate] = useState(new Date());
const [endDate, setEndDate] = useState(new Date());

useState指示何时显示报告或不显示:

const [renderPDF, setRenderPDF] = useState(false);

Gerar button

          <Button
            type="submit"
            color="success"
            onClick={() => {
              setRenderPDF(false);
              handleEventsFromMatrix() //function that call an endpoint that brings data to the report
            }}
          >
            Gerar
          </Button>

handleEventsFromMatrix(), 调用将数据带入报告的端点的函数:

async function handleEventsFromMatrix() {
    try {
      //rest of logic

      const response =
        await api.get(`endpoint`);

      if (response.data.generatedEvents.length > 0) {
        setRenderPDF(true);
      }
    } catch (err) {
      console.log(err);
    }
  }

这是显示Informe o motorista eo período para o qual você deseja gerar relatório de diários de bordo消息或带数据报告的验证规则。renderPDF钩子以 false 开始以带来消息,当请求成功完成时,将其变为 true,带来带有数据的报告。

信息:

{!renderPDF &&
  //rest of logic

  <div>
    <h1>Informe o motorista e o período para o qual você deseja gerar relatório de diários de bordo</h1>
  </div>
}

显示带有数据的报告:

{renderPDF &&
  <PDFViewer style={styles.page}>
  
  //rest of logic
}

我在这里想念什么?

4

2 回答 2

0

改成这样后可以试试吗?如果没有,请提供一个沙箱来运行整个代码。

      <Button
            type="submit"
            color="success"
            onClick={() => {
              //setRenderPDF(false); remove
              handleEventsFromMatrix() //function that call an endpoint that brings data to the report
            }}
          >
            Gerar
     </Button>
async function handleEventsFromMatrix() {
    try {
      //rest of logic

      const response =
        await api.get(`endpoint`);

        setRenderPDF(response.data.generatedEvents.length > 0);
      
    } catch (err) {
      console.log(err);
    }
  }
{renderPDF ?
  (
  <PDFViewer style={styles.page}>
    //rest of logic
  )
  :
  (
    <div>
    <h1>Informe o motorista e o período para o qual você deseja gerar 
         relatório de diários de bordo</h1>
     </div>
  )
  
  
  
}
于 2021-06-03T02:56:26.640 回答
0

在@Changhoon Lee 和@Aidan Hakimian 的帮助下,我能够调试我的代码来处理缺失的内容。

作为使用useState的钩子,它的每一个变化都会重新渲染组件(实际上是行为)。为了避免这种情况,我不得不使用useRef. useRef保存最后一个值而不重新渲染组件!

于 2021-06-04T17:01:52.657 回答