私はReactでページネーションを使用して検索を実装しています。これまでのところ例はほとんど見つかりませんでしたが、AJAXのバックエンド呼び出しの前後で、すべてがdouble setState()
のコードを使用しています。例えば、私の現在のソリューションは、次のとおりです。二重setStateなしのページネーションによるリザルト検索
import React from "react"
import PropTypes from "prop-types"
import SearchField from "components/SearchField"
import SearchResults from "components/SearchResults"
import Item from "models/Item"
class Search extends React.Component {
constructor() {
super()
this.state = {
query: "",
page: 1,
foundItems: []
}
this.handleSearch = this.handleSearch.bind(this)
this.handlePageChange = this.handlePageChange.bind(this)
}
updateSearchResults() {
const query = this.state.query
const params = {
page: this.state.page
}
Item.search(query, params).then((foundItems) => {
this.setState({ foundItems })
})
}
handleSearch(event) {
this.setState({
query: event.target.value
}, this.updateSearchResults)
}
handlePageChange(data) {
this.setState({
page: data.selected + 1
}, this.updateSearchResults)
}
render() {
return (
<div className="search">
<SearchField onSearch={this.handleSearch} />
<SearchResults
onPageChange={this.handlePageChange}
onSelect={this.props.onSelect}
items={this.state.foundItems}
/>
</div>
)
}
}
Search.propTypes = {
onSelect: PropTypes.func.isRequired
}
export default Search
私は、引数としてクエリとページを受信するupdateSearchResults
のインターフェイスを変更することができ、その後、私はそこに値を渡すために最初setState
を避けることができることを知っているが、それは似ていません良い解決策は、検索パラメータのリストが(順序、ページサイズ、フィルタの並べ替えなど)成長するので、それは少し不器用になるので。プラス私はhandleSearch
とhandlePageChange
のこのような方法でマニュアル状態の事前管理のアイデアが気に入らない。私はより良い実装を探しています。
意味しますか? – Alex
また、なぜクエリオブジェクトが状態の一部である必要があるのですか?それを非状態変数に格納できないのはなぜですか? – Alex
@Alexはい、私は 'setState'を一度呼びたいと思っています。なぜなら、アプリケーションを遅くする可能性があるのが好きではないからです。この場合ではありませんが、私はちょうど良い実践を求めていた – everm1nd