簡體   English   中英

組件不會在 useEffect() 運行一次時呈現

[英]component wont render when is useEffect() is ran once

所以我有以下代碼,我在其中獲取要在我的組件中呈現的數據。 但是,如果將 useEffect 設置為運行一次,它不會在組件內部渲染數據,並且一直運行它是不可持續的。

 import React, { useState, useEffect } from "react"; import Chart from "react-google-charts"; const Bottom5 = ({ company }) => { const [quiz, setQuiz] = useState(''); const [dataPoints, setDatapoints] = useState([]); useEffect(() => { var resultData = []; fetch(`http://localhost:3001/company/dashboard/bottom5/${company}`).then(function(response) { return response.json(); }).then(function(data) { for (var i = 0; i < data.length; i++) { resultData.push({ label: data[i].name, y: data[i].sumCorrect }); } setDatapoints(resultData) }); },[]) return ( <Chart style={{display:"inline-block"}} width={'500px'} height={'300px'} chartType="ColumnChart" loader={<div>Loading Chart</div>} data={[ ['Names', 'Result'], ...dataPoints.map(d => [d.label, dy]) ]} options={{ title: 'CyberSecurity Bottom 5', chartArea: { width: '50%' }, hAxis: { title: 'Employees', minValue: 0, }, vAxis: { title: 'Total Correct', }, }} // For tests rootProps={{ 'data-testid': '1' }} /> ) } export default Bottom5;

會不會是當您第一次安裝組件時,您沒有將company傳遞給它?

通常,由於代碼依賴於company的值,因此最好將company添加到useEffect依賴項列表中。

useEffect(() => {
  var resultData = [];
  if (company) {
    fetch(`http://localhost:3001/company/dashboard/bottom5/${company}`)
      .then(function(response) {
        return response.json();
      })
      .then(function(data) {
        for (var i = 0; i < data.length; i++) {
          resultData.push({
            label: data[i].name,
            y: data[i].sumCorrect
          });
        }
        setDatapoints(resultData)
      });
  }
}, [company])

這樣,只有在company屬性更改時才會調用它。

使用鈎子更新數組存在問題。

setDatapoints(resultData) // reference is same - not updating
setDatapoints([...resultData]) // do this << --

數組的引用不會改變,所以鈎子不會自我更新。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM