この記事を読む前提は、react フックでの useState と useEffect の基本的な使い方をマスターすることです!
?.
詳細については、「オプションのチェーン」シンタックス シュガーを参照してください。
記事ディレクトリ
効果を達成する
実装手順
1.紹介する
SearchOutlined アイコンfilterparamList:
元のテーブル データでフィルタリングされた結果リスト
associatedvalue: 入力ボックスの値 ( search value )
import {
SearchOutlined } from '@ant-design/icons'
const [associatedvalue, setAssociatedValue] = useState()
const [filterparamList, setFilterParamList] = useState([])
2. 初期化
現在のコンポーネントがテーブル値を取得する方法に応じて、さまざまなインポートの初期化が実行されます。
重要: 生のフォーム データを初期化する
In the following steps, the trigger condition used by useEffect is associatedvalue
a change, and the filtering list filterparamList
will get the associated data.
つまり、入力したばかりの入力が値のない場合はfilterparamList
空白になり、レンダリングされると空白になります。そのfilterparamList
ため、テーブルの初期データ (合計データ) である初期値を割り当てる必要があります。
方法 1: コンポーネント内のインターフェースにデータ取得を要求する.インターフェースの
戻り値はres.result
getAllPublicParam(xxxxx).then(res => {
if (res?.success) {
setFilterParamList(res.result) //初始化设置,防止开始空白情况,接收筛选后的列表
} else {
message.error(res?.message || '接口异常')
}
}
方法 2: コンポーネント内の親コンポーネントからテーブル データ props データを取得する props
データはテーブルの初期データであり、 useEffect でfilterparamList
初期値を設定します。
const {
data} = props
useEffect(() => {
setFilterParamList(data.list || [])
}, [data])
3. データのフィルタリング
associatedvalue
変更をリッスンして更新を関連付け、filterparamList
フィルターを使用して検索条件をフィルタリングする
useEffect(() => {
if (associatedvalue !== '') {
//当value不为空时
setFilterParamList([])
setFilterParamList(
data?.list?.filter(item => {
// name,displayName,paramValue为接口数据中属性(根据需求灵活变更)
// 其中任一含有associatedvalue则通过筛选
if (
item?.name?.indexOf(associatedvalue) !== -1 ||
item?.displayName?.indexOf(associatedvalue) !== -1 ||
item?.paramValue?.indexOf(associatedvalue) !== -1
) {
return true
}
return false
}),
)
} else {
//为空时将渲染原始表格数据
setFilterParamList(data?.list)
}
}, [associatedvalue])
4. データの入力と表示
入力の連携onchange
によりvalue
、リアルタイムで変更しassociatedvalue
、フィルタリングをトリガーすることができます.
useEffect テーブルに割り当てられたデータがdataSource
テーブルに表示されます, ここにフィルタリング結果のリストがあるはずです.filterparamList
ヒント:paramsCols
ここでは展開されていないのはテーブルのヘッダー データであり (検索機能とは関係ありません)、具体的な使用方法は antd ドキュメントで確認できます。
return (
<Input
value={
associatedvalue}
onChange={
e => {
setAssociatedValue(e.target.value?.trim())
}}
placeholder="请输入参数名称、参数显示名、参数说明搜索"
allowClear
style={
{
marginLeft: '20px', marginBottom: '6px', width: 350 }}
prefix={
<SearchOutlined style={
{
color: '#DEE0E8' }} />}
/>
<Table
rowKey="id"
columns={
_.filter(paramsCols, item => item.show !== false)}
dataSource={
_.uniqBy(filterparamList, 'id')}
pagination={
false}
size="middle"
scroll={
{
y: 350 }}
/>
)