橘兴兴呀 2021-08-14 14:47 采纳率: 0%
浏览 75

react+antd4+分页组件出现问题

接触react不久,用函数组件写项目,分页老是出现问题,要么就是点击分页后数据就返回到没查询之前,如果在非第一页查询返回一条数据的那个条数就会变成负数,或者查询后点击第一页又会返回没有查询之前的数据,我觉得是我的逻辑有问题但是自己又想不懂,框架也没学精,百度都搜烂了都没找到解决方法
需求:
1,三个组件,一个父两个子,然后父组件是组页面,子组件一个是搜索表单,一个是表格组件用来展示数据的
2,分页放在了父组件里面,但是搜索得来的数据展示分页有问题,我的代码如下:
父组件:

const TableList = () => {
  // 存储要展示的数据
  const [ nfcInfo, setNfcInfo ] = useState([])
  // 接收搜索组件传过来的表单数据
  const [sMessage, setMessage] = useState({})
  // 总条数
  const [totals, setTotals] = useState(50);
  // 获取查询组件传过来的值
  const getCMsg = (msg) => {
    // console.log('这是S组件传过来的', msg)
    setMessage(msg)
    getNFCInfo(1,50, msg)
  }   
  // 获取nfc的数据
  const getNFCInfo = async (page, limit, sMessage) => {
    console.log('这里是nfc的数据',sMessage)
      if(sMessage){
        await disinNfcList({
          page: page,
          limit: limit,
          nfc: sMessage.nfc,
          status: sMessage.status,
          belongHosName: sMessage.belongHosName,
          startTime: sMessage.startTime,
          endTime: sMessage.endTime
        }).then(res => {
          // 获取返回的数据
          setNfcInfo(res.data)
          // 获取总条数
          setTotals(res.count)
        })
      } 
      else {
        await disinNfcList({
          page: page,
          limit: limit,
        }).then(res => {
          // 获取返回的数据
          setNfcInfo(res.data)
          // 获取总条数
          setTotals(res.count) 
        })
      }
  }
  // 控制分页
  const showData = (current, pageSize) => {
    sMessage ? getNFCInfo(current, pageSize, sMessage) : getNFCInfo(current, pageSize)
  }
  useEffect(() => {
    sMessage ? getNFCInfo(1,50, sMessage):getNFCInfo(1,50)
    // getNFCInfo(1,50)
  },[])
  useEffect(() => {
    setTotals(totals)
  }, [totals])
 
  return (
    <PageHeaderWrapper>
      <IntlProvider value={getNewLocal()}>
        {/* 查询部分 */}
        <Card className={styles.Card_Styles_One}>
          <SearchFrom getFmsg={getCMsg}/>
        </Card>
        <Card  className={styles.CardStyles}>
          {/* 表格部分 */}
          <div className={styles.divStyle}>
            <DiyTable data={nfcInfo}/>
          </div>
          {/* 底部分页 */}
          <div className={styles.divStyle}
        <Pagination size="small" total={totals}
              showSizeChanger
              showTotal={(total, range) => locale == 'en'?`${range[0]}-${range[1]} of ${total} items`: `第 ${range[0]}-${range[1]} 条/总共 ${total} 条`}
              defaultPageSize={50}
              defaultCurrent={1}
              pageSizeOptions={[50,80,100,120]}
              onChange={showData}
              onShowSizeChange={ppt}
              className={styles.Pag_style}
            />
          </div>
        </Card>
      </IntlProvider>
    </PageHeaderWrapper>
  );
};
export default TableList;

搜索表单, 父组件相关的就这一部分内容,就是表单完成后调用父组件的方法把值传过去

 const onFinish = (values) => {
      props.getFmsg({
        nfc: values.nfc,
        status: values.status,
        belongHosName: values.belongHosName,
        startTime: st,
        endTime: et,
        msg: true
      })
  };

数展示页面就是一自己自定义的table,就负责接收数据然后展示,


const DiyTable = props => {
  const { data } = props
  console.log('这里是父组件传过来的数据data',data)
  if(data){
    return (
      <div style={{width:"100%"}}>
        <table className={styles.tableStyle}>
          <tbody>             
           {/* 表格部分 */}
          </tbody>
        </table>
      </div>    
};
export default DiyTable;  

实在不知道哪里有问题,麻烦各位网友帮帮忙看一下谢谢

  • 写回答

1条回答 默认 最新

  • 崽崽的谷雨 2021-08-16 09:54
    关注

    // 控制分页
    const showData = (current, pageSize) => {
    sMessage ? getNFCInfo(current, pageSize, sMessage) : getNFCInfo(current, pageSize)
    }
    useEffect(() => {
    sMessage ? getNFCInfo(1,50, sMessage):getNFCInfo(1,50)
    // getNFCInfo(1,50)
    },[])
    你这个是是什么意思。上面是传的当前页,每页条数。下面这个怎么写死的1,50是指默认就是第一页,50条?关键点应该是sMessage 这个状态的问题

    评论

报告相同问题?

问题事件

  • 创建了问题 8月14日

悬赏问题

  • ¥15 有赏,i卡绘世画不出
  • ¥15 如何用stata画出文献中常见的安慰剂检验图
  • ¥15 c语言链表结构体数据插入
  • ¥40 使用MATLAB解答线性代数问题
  • ¥15 COCOS的问题COCOS的问题
  • ¥15 FPGA-SRIO初始化失败
  • ¥15 MapReduce实现倒排索引失败
  • ¥15 ZABBIX6.0L连接数据库报错,如何解决?(操作系统-centos)
  • ¥15 找一位技术过硬的游戏pj程序员
  • ¥15 matlab生成电测深三层曲线模型代码