typescript 如何在react中重建一个表?

bjg7j2ky  于 2023-04-22  发布在  TypeScript
关注(0)|答案(1)|浏览(81)

我有一些问题与重建我的网页上的表时,数据发生变化.我有函数getData重置所有信息从API.重点是数据正在获取,但表不重写.虽然,我看到DataPicker参数返回最后的日期,不是我选择的(例如,2023年1月18日,我选择2023年1月27日,返回2023年1月18日)。

const [loadingData, setLoadingData] = useState(true);
const [dataUpdated, setDataUpdated] = useState(false);
const [data, setData] = useState([]) 
const [Infodate, setInfoDate] = useState(new Date())
const [date , setDate] = useState("2023-01-25") 
const [ resource, setResource ] = useState( _resource_to_ask ) 
const [ link, setLink ] = useState(MyLink) 

function LDStoDateString() {
  let string_to_search = Infodate.toLocaleDateString(); 
  let parts = string_to_search.split('.');
  let day = parts[0]; 
  let mes = parts[1];
  let year = parts[2]; 
  setDate(`${year}-${mes}-${day}`);
 }

async function getData() { 
  console.log("GetData called") 
  setData([]) 
  LDStoDateString()
  let link_to_fetch = `${link}/${resource}?data=${date}` 
  await axios.get(link_to_fetch).then((response) => { 
    console.log("Data is accepted") 
    let items: any = [] 
    response.data.forEach(element => { 
      console.log(element) 
      items.push({ name: element.Name, bool1 : 
      StringVSBool(element.bool1),}) 
    });
    setData(items);
    setLoadingData(false); 
   }); 
} 

function handleDatePickerChange() { 
  setLoadingData(true) 
}
 
function SettingData(date_new) { 
  setInfoDate(date_new)
}

useEffect(() => {
  if (loadingData) {
    getData(); 
  }
}, []); 

return ( 
  <div className="App"> 
  <DatePicker
    dateFormat="yyyy-MM-dd"
    selected={Infodate}
    onChange={(date_new) => { SettingData(date_new) }}
  />
  { loadingData 
      ? ( <p>Loading Please wait...</p> )
      : <Table columns={cols} data={data} } />
   }
</div>

为什么会发生这种情况?我如何修复此问题以更新某些事件的表?

qgelzfjb

qgelzfjb1#

所以在React中,组件在四种情况下重新呈现。这些情况是:
1.家长退费
1.状态变化
1.背景变化
1.钩变化
现在,setData()应该调用状态更改,因此它应该触发元素重新呈现自身。此外,由于父组件重新呈现,表现在应该再次使用新数据重新呈现吗?
现在问题很可能是因为JS没有把setData(items)看作是一个新的数组,因此它认为状态没有改变。JS实际上并没有遍历数组,它只是检查引用。
您可以尝试将您的项目传播到状态,以便像这样强制创建新的引用

setData([...items])

希望有帮助!如果你在里面使用console.log或使用React devtools来记录rerender,你可以检查表是否被重建。
阅读React组件重新渲染的好阅读:https://www.developerway.com/posts/react-re-renders-guide

相关问题