我有一些问题与重建我的网页上的表时,数据发生变化.我有函数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>
为什么会发生这种情况?我如何修复此问题以更新某些事件的表?
1条答案
按热度按时间qgelzfjb1#
所以在React中,组件在四种情况下重新呈现。这些情况是:
1.家长退费
1.状态变化
1.背景变化
1.钩变化
现在,setData()应该调用状态更改,因此它应该触发元素重新呈现自身。此外,由于父组件重新呈现,表现在应该再次使用新数据重新呈现吗?
现在问题很可能是因为JS没有把setData(items)看作是一个新的数组,因此它认为状态没有改变。JS实际上并没有遍历数组,它只是检查引用。
您可以尝试将您的项目传播到状态,以便像这样强制创建新的引用
希望有帮助!如果你在里面使用console.log或使用React devtools来记录rerender,你可以检查表是否被重建。
阅读React组件重新渲染的好阅读:https://www.developerway.com/posts/react-re-renders-guide