Reactjs React js搜索不’;t在图形ql分页上工作
我使用react js创建了一个搜索函数来过滤从graphql端点获取的数据表 代码:Reactjs React js搜索不’;t在图形ql分页上工作,reactjs,graphql,jsx,create-react-app,react-apollo,Reactjs,Graphql,Jsx,Create React App,React Apollo,我使用react js创建了一个搜索函数来过滤从graphql端点获取的数据表 代码: const SearchRes = () => { let filtredRes = data.Orders.edges .filter(item => item.node.shippingAddress.name === (query)); let res = filtredRes.length === 0 ? data.Orders.edges : filtr
const SearchRes = () => {
let filtredRes = data.Orders.edges
.filter(item => item.node.shippingAddress.name === (query));
let res = filtredRes.length === 0 ? data.Orders.edges : filtredRes;
return res;
}
SearchRes.map(...)
import React, { useState, useEffect } from 'react'
import { gql, useQuery } from '@apollo/client';
import Table from 'react-bootstrap/Table'
import Moment from 'react-moment';
import moment from "moment";
import { Link } from 'react-router-dom';
import Row from 'react-bootstrap/Row'
import Col from 'react-bootstrap/Col'
import { DangerousChangeType } from 'graphql';
import Search from './Search'
import Button from 'react-bootstrap/Button'
const GET_All_Orders = gql`
query Orders($input1: PaginationInput) {
Orders(input: $input1){
pageInfo {
hasNextPage
hasPreviousPage
}
edges{
cursor
node {
id
closed
email
createdAt
updatedAt
cancelledAt
displayFinancialStatus
displayFulfillmentStatus
lineItems{
edges{
node {
customAttributes{
key
value
}
id
quantity
title
variant{
id
image {
altText
id
src
}
title
weight
weightUnit
price
}
}
}
}
shippingAddress {
name
}
phone
subtotalPrice
totalPrice
totalRefunded
totalTax
processedAt
}
}
}
}
`;
export default function AllOrders({ input1 }) {
const { loading, error, data , fetchMore} = useQuery(
GET_All_Orders,
{
variables: {
"input1": {
"num": 20,
}
},
}
);
let date = new Date();
const [query, setQuery] = useState('');
if (loading) return <h4>読み込み中...</h4>;
if (error) return `Error! ${error}`;
const SearchRes = () => {
let filtredRes = data.Orders.edges
.filter(
item => (
item.node.shippingAddress.name === (query) ||
item.node.email === (query)
)
);
let res = filtredRes.length === 0 ? data.Orders.edges : filtredRes;
return res;
}
return (
<div>
<Row >
<Col xs={10}> <h5>すべての注文</h5></Col>
<Col><h5> 日付 : <Moment format="YYYY/MM/DD">
{ date}
</Moment> </h5></Col>
</Row>
<br/>
<Search getQuery={(q) => setQuery(q)} />
<br/>
<Table responsive hover size="sm">
<thead>
<tr>
<th className="allOrders">注文日</th>
<th className="allOrders">名前</th>
<th className="allOrders">注文者メールアドレス</th>
<th className="allOrders" >配送状態</th>
<th className="allOrders" >支払状況</th>
<th className="allOrders" >合計金額</th>
<th className="allOrders" >詳細</th>
</tr>
</thead>
<tbody>
{SearchRes().map(({ edges ,node :{id , createdAt , displayFulfillmentStatus , displayFinancialStatus , totalPrice , email , shippingAddress: {
name
} }}) => (
<tr key={id}>
<td> <Moment format="YYYY/MM/DD">
{createdAt}
</Moment></td>
<td>{ name} </td>
<td>{ email} </td>
{displayFulfillmentStatus == "FULFILLED" ? <td className="success">配送済み</td> : <td className="failed">未配送</td>}
{displayFinancialStatus == "PAID" ? <td>支払済み</td> : <td>未払い</td> }
<td>{totalPrice} </td>
<td>
<Link to={`/orders/${id}`} className="btn btn-light">
詳細
</Link></td>
</tr>
))}
</tbody>
</Table>
{/* button responsible for the pagination */}
<div className="text-center">
<Button
variant="light"
onClick={() => {
fetchMore({
variables: {
"input1": {
"num": 20,
"cursor": data.Orders.edges[data.Orders.edges.length - 1].cursor
}
},
updateQuery: (prevResult, { fetchMoreResult }) => {
fetchMoreResult.Orders.edges = [
...prevResult.Orders.edges,
...fetchMoreResult.Orders.edges
];
return fetchMoreResult;
}
});
}}
>
もっと
</Button>
</div>
</div>
);
}
然后不要只做以下操作来获取数据:
const SearchRes = () => {
let filtredRes = data.Orders.edges
.filter(item => item.node.shippingAddress.name === (query));
let res = filtredRes.length === 0 ? data.Orders.edges : filtredRes;
return res;
}
SearchRes.map(...)
import React, { useState, useEffect } from 'react'
import { gql, useQuery } from '@apollo/client';
import Table from 'react-bootstrap/Table'
import Moment from 'react-moment';
import moment from "moment";
import { Link } from 'react-router-dom';
import Row from 'react-bootstrap/Row'
import Col from 'react-bootstrap/Col'
import { DangerousChangeType } from 'graphql';
import Search from './Search'
import Button from 'react-bootstrap/Button'
const GET_All_Orders = gql`
query Orders($input1: PaginationInput) {
Orders(input: $input1){
pageInfo {
hasNextPage
hasPreviousPage
}
edges{
cursor
node {
id
closed
email
createdAt
updatedAt
cancelledAt
displayFinancialStatus
displayFulfillmentStatus
lineItems{
edges{
node {
customAttributes{
key
value
}
id
quantity
title
variant{
id
image {
altText
id
src
}
title
weight
weightUnit
price
}
}
}
}
shippingAddress {
name
}
phone
subtotalPrice
totalPrice
totalRefunded
totalTax
processedAt
}
}
}
}
`;
export default function AllOrders({ input1 }) {
const { loading, error, data , fetchMore} = useQuery(
GET_All_Orders,
{
variables: {
"input1": {
"num": 20,
}
},
}
);
let date = new Date();
const [query, setQuery] = useState('');
if (loading) return <h4>読み込み中...</h4>;
if (error) return `Error! ${error}`;
const SearchRes = () => {
let filtredRes = data.Orders.edges
.filter(
item => (
item.node.shippingAddress.name === (query) ||
item.node.email === (query)
)
);
let res = filtredRes.length === 0 ? data.Orders.edges : filtredRes;
return res;
}
return (
<div>
<Row >
<Col xs={10}> <h5>すべての注文</h5></Col>
<Col><h5> 日付 : <Moment format="YYYY/MM/DD">
{ date}
</Moment> </h5></Col>
</Row>
<br/>
<Search getQuery={(q) => setQuery(q)} />
<br/>
<Table responsive hover size="sm">
<thead>
<tr>
<th className="allOrders">注文日</th>
<th className="allOrders">名前</th>
<th className="allOrders">注文者メールアドレス</th>
<th className="allOrders" >配送状態</th>
<th className="allOrders" >支払状況</th>
<th className="allOrders" >合計金額</th>
<th className="allOrders" >詳細</th>
</tr>
</thead>
<tbody>
{SearchRes().map(({ edges ,node :{id , createdAt , displayFulfillmentStatus , displayFinancialStatus , totalPrice , email , shippingAddress: {
name
} }}) => (
<tr key={id}>
<td> <Moment format="YYYY/MM/DD">
{createdAt}
</Moment></td>
<td>{ name} </td>
<td>{ email} </td>
{displayFulfillmentStatus == "FULFILLED" ? <td className="success">配送済み</td> : <td className="failed">未配送</td>}
{displayFinancialStatus == "PAID" ? <td>支払済み</td> : <td>未払い</td> }
<td>{totalPrice} </td>
<td>
<Link to={`/orders/${id}`} className="btn btn-light">
詳細
</Link></td>
</tr>
))}
</tbody>
</Table>
{/* button responsible for the pagination */}
<div className="text-center">
<Button
variant="light"
onClick={() => {
fetchMore({
variables: {
"input1": {
"num": 20,
"cursor": data.Orders.edges[data.Orders.edges.length - 1].cursor
}
},
updateQuery: (prevResult, { fetchMoreResult }) => {
fetchMoreResult.Orders.edges = [
...prevResult.Orders.edges,
...fetchMoreResult.Orders.edges
];
return fetchMoreResult;
}
});
}}
>
もっと
</Button>
</div>
</div>
);
}
这很好,我可以进行搜索,但是当我实现graphql分页时,搜索停止了对结果的处理,它只在单击按钮获取更多结果之前起作用
代码:
const SearchRes = () => {
let filtredRes = data.Orders.edges
.filter(item => item.node.shippingAddress.name === (query));
let res = filtredRes.length === 0 ? data.Orders.edges : filtredRes;
return res;
}
SearchRes.map(...)
import React, { useState, useEffect } from 'react'
import { gql, useQuery } from '@apollo/client';
import Table from 'react-bootstrap/Table'
import Moment from 'react-moment';
import moment from "moment";
import { Link } from 'react-router-dom';
import Row from 'react-bootstrap/Row'
import Col from 'react-bootstrap/Col'
import { DangerousChangeType } from 'graphql';
import Search from './Search'
import Button from 'react-bootstrap/Button'
const GET_All_Orders = gql`
query Orders($input1: PaginationInput) {
Orders(input: $input1){
pageInfo {
hasNextPage
hasPreviousPage
}
edges{
cursor
node {
id
closed
email
createdAt
updatedAt
cancelledAt
displayFinancialStatus
displayFulfillmentStatus
lineItems{
edges{
node {
customAttributes{
key
value
}
id
quantity
title
variant{
id
image {
altText
id
src
}
title
weight
weightUnit
price
}
}
}
}
shippingAddress {
name
}
phone
subtotalPrice
totalPrice
totalRefunded
totalTax
processedAt
}
}
}
}
`;
export default function AllOrders({ input1 }) {
const { loading, error, data , fetchMore} = useQuery(
GET_All_Orders,
{
variables: {
"input1": {
"num": 20,
}
},
}
);
let date = new Date();
const [query, setQuery] = useState('');
if (loading) return <h4>読み込み中...</h4>;
if (error) return `Error! ${error}`;
const SearchRes = () => {
let filtredRes = data.Orders.edges
.filter(
item => (
item.node.shippingAddress.name === (query) ||
item.node.email === (query)
)
);
let res = filtredRes.length === 0 ? data.Orders.edges : filtredRes;
return res;
}
return (
<div>
<Row >
<Col xs={10}> <h5>すべての注文</h5></Col>
<Col><h5> 日付 : <Moment format="YYYY/MM/DD">
{ date}
</Moment> </h5></Col>
</Row>
<br/>
<Search getQuery={(q) => setQuery(q)} />
<br/>
<Table responsive hover size="sm">
<thead>
<tr>
<th className="allOrders">注文日</th>
<th className="allOrders">名前</th>
<th className="allOrders">注文者メールアドレス</th>
<th className="allOrders" >配送状態</th>
<th className="allOrders" >支払状況</th>
<th className="allOrders" >合計金額</th>
<th className="allOrders" >詳細</th>
</tr>
</thead>
<tbody>
{SearchRes().map(({ edges ,node :{id , createdAt , displayFulfillmentStatus , displayFinancialStatus , totalPrice , email , shippingAddress: {
name
} }}) => (
<tr key={id}>
<td> <Moment format="YYYY/MM/DD">
{createdAt}
</Moment></td>
<td>{ name} </td>
<td>{ email} </td>
{displayFulfillmentStatus == "FULFILLED" ? <td className="success">配送済み</td> : <td className="failed">未配送</td>}
{displayFinancialStatus == "PAID" ? <td>支払済み</td> : <td>未払い</td> }
<td>{totalPrice} </td>
<td>
<Link to={`/orders/${id}`} className="btn btn-light">
詳細
</Link></td>
</tr>
))}
</tbody>
</Table>
{/* button responsible for the pagination */}
<div className="text-center">
<Button
variant="light"
onClick={() => {
fetchMore({
variables: {
"input1": {
"num": 20,
"cursor": data.Orders.edges[data.Orders.edges.length - 1].cursor
}
},
updateQuery: (prevResult, { fetchMoreResult }) => {
fetchMoreResult.Orders.edges = [
...prevResult.Orders.edges,
...fetchMoreResult.Orders.edges
];
return fetchMoreResult;
}
});
}}
>
もっと
</Button>
</div>
</div>
);
}
import React,{useState,useffect}来自“React”
从'@apollo/client'导入{gql,useQuery};
从“react引导/表”导入表
从“反应力矩”导入力矩;
从“时刻”中导入时刻;
从'react router dom'导入{Link};
从“反应引导/行”导入行
从“反应引导/Col”导入Col
从“graphql”导入{DangerousChangeType};
从“./Search”导入搜索
从“反应引导/按钮”导入按钮
const GET_All_Orders=gql`
查询订单($input1:PaginationInput){
订单(输入:$input1){
页面信息{
下一页
上一页
}
边缘{
光标
节点{
身份证件
关闭
电子邮件
创建数据
更新的
取消
显示财务状态
显示完成状态
行项目{
边缘{
节点{
自定义属性{
钥匙
价值
}
身份证件
量
标题
变体{
身份证件
形象{
altText
身份证件
src
}
标题
重量
重量单位
价格
}
}
}
}
发货地址{
名称
}
电话
小计价格
总价格
退款总额
总税
加工
}
}
}
}
`;
导出默认函数AllOrders({input1}){
const{loading,error,data,fetchMore}=useQuery(
拿到所有的订单,
{
变量:{
“输入1”:{
“num”:20,
}
},
}
);
让日期=新日期();
const[query,setQuery]=useState(“”);
如果(正在加载)返回読み込み中...;
if(error)返回`error!${error}`;
const SearchRes=()=>{
设filtedres=data.Orders.edges
.过滤器(
项目=>(
item.node.shippingAddress.name==(查询)||
item.node.email==(查询)
)
);
设res=filteredres.length==0?data.Orders.edges:filteredres;
返回res;
}
返回(
すべての注文
日付 :
{date}
setQuery(q)}/>
注文日
名前
注文者メールアドレス
配送状態
支払状況
合計金額
詳細
{SearchRes().map({edges,node:{id,createdAt,displayFulfillmentStatus,displayFinancialStatus,totalPrice,email,shippingAddress:{
名称
} }}) => (
{createdAt}
{name}
{email}
{displayFulfillmentStatus==“已完成”?配送済み : 未配送}
{displayFinancialStatus==“已支付”?支払済み : 未払い }
{totalPrice}
詳細
))}
{/*负责分页的按钮*/}
{
费特莫尔({
变量:{
“输入1”:{
“num”:20,
“游标”:data.Orders.edges[data.Orders.edges.length-1]。游标
}
},
updateQuery:(prevResult,{fetchMoreResult})=>{
fetchMoreResult.Orders.Edge=[
…prevResult.Orders.Edge,
…fetchMoreResult.Orders.Edge
];
返回结果;
}
});
}}
>
もっと
);
}
问题可能是:
const SearchRes = () => {
let filtredRes = data.Orders.edges
.filter(item => item.node.shippingAddress.name === (query));
let res = filtredRes.length === 0 ? data.Orders.edges : filtredRes;
return res;
}
SearchRes.map(...)
import React, { useState, useEffect } from 'react'
import { gql, useQuery } from '@apollo/client';
import Table from 'react-bootstrap/Table'
import Moment from 'react-moment';
import moment from "moment";
import { Link } from 'react-router-dom';
import Row from 'react-bootstrap/Row'
import Col from 'react-bootstrap/Col'
import { DangerousChangeType } from 'graphql';
import Search from './Search'
import Button from 'react-bootstrap/Button'
const GET_All_Orders = gql`
query Orders($input1: PaginationInput) {
Orders(input: $input1){
pageInfo {
hasNextPage
hasPreviousPage
}
edges{
cursor
node {
id
closed
email
createdAt
updatedAt
cancelledAt
displayFinancialStatus
displayFulfillmentStatus
lineItems{
edges{
node {
customAttributes{
key
value
}
id
quantity
title
variant{
id
image {
altText
id
src
}
title
weight
weightUnit
price
}
}
}
}
shippingAddress {
name
}
phone
subtotalPrice
totalPrice
totalRefunded
totalTax
processedAt
}
}
}
}
`;
export default function AllOrders({ input1 }) {
const { loading, error, data , fetchMore} = useQuery(
GET_All_Orders,
{
variables: {
"input1": {
"num": 20,
}
},
}
);
let date = new Date();
const [query, setQuery] = useState('');
if (loading) return <h4>読み込み中...</h4>;
if (error) return `Error! ${error}`;
const SearchRes = () => {
let filtredRes = data.Orders.edges
.filter(
item => (
item.node.shippingAddress.name === (query) ||
item.node.email === (query)
)
);
let res = filtredRes.length === 0 ? data.Orders.edges : filtredRes;
return res;
}
return (
<div>
<Row >
<Col xs={10}> <h5>すべての注文</h5></Col>
<Col><h5> 日付 : <Moment format="YYYY/MM/DD">
{ date}
</Moment> </h5></Col>
</Row>
<br/>
<Search getQuery={(q) => setQuery(q)} />
<br/>
<Table responsive hover size="sm">
<thead>
<tr>
<th className="allOrders">注文日</th>
<th className="allOrders">名前</th>
<th className="allOrders">注文者メールアドレス</th>
<th className="allOrders" >配送状態</th>
<th className="allOrders" >支払状況</th>
<th className="allOrders" >合計金額</th>
<th className="allOrders" >詳細</th>
</tr>
</thead>
<tbody>
{SearchRes().map(({ edges ,node :{id , createdAt , displayFulfillmentStatus , displayFinancialStatus , totalPrice , email , shippingAddress: {
name
} }}) => (
<tr key={id}>
<td> <Moment format="YYYY/MM/DD">
{createdAt}
</Moment></td>
<td>{ name} </td>
<td>{ email} </td>
{displayFulfillmentStatus == "FULFILLED" ? <td className="success">配送済み</td> : <td className="failed">未配送</td>}
{displayFinancialStatus == "PAID" ? <td>支払済み</td> : <td>未払い</td> }
<td>{totalPrice} </td>
<td>
<Link to={`/orders/${id}`} className="btn btn-light">
詳細
</Link></td>
</tr>
))}
</tbody>
</Table>
{/* button responsible for the pagination */}
<div className="text-center">
<Button
variant="light"
onClick={() => {
fetchMore({
variables: {
"input1": {
"num": 20,
"cursor": data.Orders.edges[data.Orders.edges.length - 1].cursor
}
},
updateQuery: (prevResult, { fetchMoreResult }) => {
fetchMoreResult.Orders.edges = [
...prevResult.Orders.edges,
...fetchMoreResult.Orders.edges
];
return fetchMoreResult;
}
});
}}
>
もっと
</Button>
</div>
</div>
);
}
1)我认为问题在于按钮获取不同的表,这可能就是函数不搜索它的原因
我认为
SearchRes
功能应该是
const SearchRes=()=>{
设filtedres=data.Orders.edges
.filter(item=>item.node.shippingAddress.name==(查询)||
item.node.email==(查询));
let res=query?filtedres:data.Orders.edges;
返回res;
}
当查询为空时,即用户让搜索输入为空,应显示所有结果,当用户在搜索输入中输入内容时,应仅显示过滤后的结果,即使没有匹配的结果。
我不知道这是否是你的错误的真正原因,但我认为这确实是一个错误。我想你是清楚的