用React+typescript实现一下功能代码:A页面是一个带有搜索功能的表格,当从A页面离开之后再回来时,页面保持离开之前的数据和搜索状态
时间: 2024-03-21 11:41:05 浏览: 139
React+TypeScript+webpack4多入口配置详解
好的,下面是一个简单的实现示例:
```tsx
import React, { useState, useEffect } from 'react';
import { useHistory, useLocation } from 'react-router-dom';
import queryString from 'query-string';
interface TableData {
id: number;
name: string;
age: number;
}
const APage: React.FC = () => {
const history = useHistory();
const location = useLocation();
const queryParams = queryString.parse(location.search);
const [searchText, setSearchText] = useState<string>(queryParams.searchText?.toString() ?? '');
const [tableData, setTableData] = useState<TableData[]>(() => {
const cachedData = localStorage.getItem('tableData');
return cachedData ? JSON.parse(cachedData) : [];
});
useEffect(() => {
localStorage.setItem('tableData', JSON.stringify(tableData));
}, [tableData]);
const handleSearch = (e: React.FormEvent<HTMLFormElement>) => {
e.preventDefault();
history.push(`?searchText=${searchText}`);
};
const handleClear = () => {
setSearchText('');
history.push(location.pathname);
};
return (
<div>
<form onSubmit={handleSearch}>
<input type="text" value={searchText} onChange={(e) => setSearchText(e.target.value)} />
<button type="submit">Search</button>
<button type="button" onClick={handleClear}>Clear</button>
</form>
<table>
<thead>
<tr>
<th>ID</th>
<th>Name</th>
<th>Age</th>
</tr>
</thead>
<tbody>
{tableData.map((item) => (
<tr key={item.id}>
<td>{item.id}</td>
<td>{item.name}</td>
<td>{item.age}</td>
</tr>
))}
</tbody>
</table>
</div>
);
};
export default APage;
```
这个示例中,我们使用了 `useHistory` 和 `useLocation` 这两个 React Router 提供的 Hook 来获取当前页面的路由信息和搜索参数。当用户进行搜索时,我们通过 `history.push` 方法将搜索参数写入 URL 中,以便用户在离开页面后再次回来时能够恢复搜索状态。同时,我们还可以通过 `localStorage` 将表格数据缓存下来,以便用户在离开页面后再次回来时能够恢复数据。注意,在使用 `localStorage` 时,我们需要使用函数式更新来读取缓存的数据,以避免在每次重新渲染组件时都从 `localStorage` 中读取数据。
阅读全文