これは、クライアント側のアプリケーション データをフィルタリングするための小さくて目立たない React コンポーネントです。
npm i react-filter-search
yarn add react-filter-search
React Filter Search は、アプリケーション状態のデータを必要とする単なるコンポーネントです ( object
のarray
と入力値である必要があります。その結果、返される結果は...
このデータは、上記のいずれかを返すレンダー プロップであるrenderResults
の形式で逆流されます。したがって、データと入力値を渡す設定を行う必要があります。
このように、React Filter Search は、データの保存方法やアプリケーションでのユーザー入力の処理方法について、偏見を持ちません。 ?
//
/*-Other Imports-*/
//
import FilterResults from 'react-filter-search' ;
class App extends Component {
constructor ( props ) {
super ( props ) ;
this . state = {
data : [ ] ,
value : ''
} ;
}
componentWillMount ( ) {
fetch ( 'https://jsonplaceholder.typicode.com/users' )
. then ( response => response . json ( ) )
. then ( json => this . setState ( { data : json } ) ) ;
}
handleChange = event => {
const { value } = event . target ;
this . setState ( { value } ) ;
} ;
render ( ) {
const { data , value } = this . state ;
return (
< div >
< input type = "text" value = { value } onChange = { this . handleChange } / >
< SearchResults
value = { value }
data = { data }
renderResults = { results => (
< div >
{ results . map ( el => (
< div >
< span > { el . name } < / span >
< span > { el . email } < / span >
< / div >
) ) }
< / div >
) }
/ >
< / div >
) ;
}
}
魔法はrenderResults
で発生し、オブジェクトの配列を返します。データはユーザー入力に基づいてフィルタリングされているか、フィルタリングされていません。
フィルタリング ロジックは、データ構造内のあらゆるレベルのネストに対して反復されます。つまり、これに対する良い提案は、多くのレベルであまりネストされていないユーザー データや ToDo アイテムのようなものです。
特定の属性のみを使用してフィルタリングしたい場合は、オプションのpick
prop を使用できます。
// if each object is of the form
var obj = { name : "Leanne Graham" , username : "Bret" , email : "[email protected]" , company : { "name" : "Romaguera-Crona" } }
< SearchResults
. . .
pick = { [ 'username' , 'company.name' ] }
...
/ >
// your objects will be filtered only with the name and company.name fields
// but you can still render other values like username and email
データをレンダリングするには、.map() を使用してビューにレンダリングするだけです。データは同じ構造に保持されます。インライン JSX を返すか、UI をレンダリングするステートレスな React コンポーネントに各要素をフィードします。
props
名前 | タイプ | 必須? |
---|---|---|
value | string | true |
data | object のarray | true |
renderResults | func | true |
pick | string 列のarray | false |
CONTRIBUTING.md
読んで、ぜひ参加してください! ?