【发布时间】:2021-11-26 01:26:09
【问题描述】:
目前的功能是
只有当用户点击submit 按钮时才会加载数据。如果他没有放任何filter,那么所有数据都会被加载。
const submit = async (e: SyntheticEvent) => {
e.preventDefault();
const param = {
...(certificateNo && { certificateNo: certificateNo }),
...(protoColNo && { protoColNo: protoColNo }),
...(requestStatus && { requestStatus: requestStatus }),
...(sponser && { sponser: sponser }),
...(country && { country: country }),
...(noOfSubjects && { noOfSubjects: noOfSubjects }),
...(startDate && { startDate: startDate }),
...(endDate && { endDate: endDate }),
};
console.log(param);
const { data } = await axios.get('http://localhost:3000/api/certificates', {
params: param,
});
console.log(data);
setFlag(true);
setResponse(data);
};
现在我有一个要求。当page 获取没有任何filter 的加载数据时,应该在页面上加载。表示用户访问时可以看到页面上的数据,稍后他可以在点击提交按钮后应用过滤器。
我正在考虑使用 useEffect() ,你能指导一下如何做到这一点。
我在这里放了下一个和上一个代码
const [page, setPage] = useState(1);
const [lastPage, setLastPage] = useState(0);
const next = () => {
if (page <= lastPage) {
setPage(page + 1);
fetchData(page);
}
}
和以前的
const prev = () => {
if (page >= 1) {
setPage(page - 1);
}
}
下面是我创建的按钮
<ul className="pagination">
<li className="page-item">
<button onClick={prev}>Previous</button>
</li>
<li className="page-item">
<button onClick={next}>Next</button>
</li>
</ul>
【问题讨论】:
-
点击提交后,您是发送 API 请求,返回过滤后的数据,还是只想过滤状态中存储的数据?
-
您需要一个新状态
const [ filter, setFitler ] = useState({});,它会在您更新表单时存储表单的详细信息。当您提交表单时,您将调用一个函数,该函数将在数据上filter并返回一组新数据,其中数据中的属性值与过滤器对象中的值匹配。然后该数据将用于您的表格。 -
@Gnanavel 在页面加载时将在 UI 上加载整个数据。用户可以稍后过滤。所以基本上需要过滤存储在状态上的数据。
-
@Andy 每次用户单击提交按钮时我都必须调用 API 吗?我们可以做点什么,以便在 UI 级别进行处理吗?
-
@NiharikaS 不一定。您必须下载 所有 数据,根据其大小,这些数据可能不如将过滤器状态发送到使用该信息发回正确数据的服务器那样最佳。您的数据集中有多少行数据?
标签: javascript html reactjs api react-hooks