react列表展示的优化

2020-09-09  本文已影响0人  雨落倾城夏微凉_e861

项目开发完成后除了改bug外,还要考虑一些细节的优化点,考虑哪些行为对用户是不友好的.在之前开发完成的那个react项目中找个小例子说明一下.

在之前开发的项目中有很多列表展示的数据,但是如果没数据要展示ui给定的设计,也就是一些图片文案什么的.鉴于要多地方使用所以将为空的状态单独写一个组件,图片地址和文案动态传入.

先来说说会出现的情况因为数据是异步请求的,刚开始我是通过数据的长度是否为0来判断是否展示空组件,但是数据请求需要一定的时间,那么就会出现用户进入页面后空组件会一闪而过,这样对于用户在视觉上的体验肯定是不友好的.

因此我采取的方法是定义一个状态,默认值设为false,当请求成功时状态设为true.当状态为true并且数据长度为0时才展示空组件.但是这样会引来另一个问题,那就是刚开始页面会出现短暂空白然后展示空组件或者数据列表.当然这个可以根据产品要求可以加一些loading动画什么的.

let [newList, setCount] = useState({//需要获取的数据
    pageNum: 1,
    pageSize: 10,
    total: 0,
    list: []
  });
let [pageMain, setPagemain] = useState(false);//设置数据是否请求成功的状态

  let initTask = pageNum => {
    getTaskNum(0, pageNum, newList.pageSize).then(res => {//数据请求方法
      if (res.msg == "success") {
        setCount({ ...res.data, pageNum });
        if (!pageMain) {//如果状态是false的话那就设置为true
          setPagemain(true);
        }
      }
    });
  };

  useEffect(() => {//调用数据请求方法
    initTask(newList.pageNum);
  }, []);

return (
    <Layout>
      <Antspin ishide={pageMain ? "none" : "block"}>//根据设置的状态判断loading是否显示隐藏
        <Spin size="large" spinning={!pageMain}></Spin>
      </Antspin>

      {pageMain && newList.list.length == 0 ? (//如果状态为true并且数据长度为0展示空组件
        <MangeVoid voidText="没有新的分配项目呦,耐心等等吧。"></MangeVoid>
      ) : (
        newList.list.map((item, index) => (
          <ManageNewTask key={index}> </ManageNewTask>
        ))
      )}
    </Layout>
  );

这样就可以让用户体验更友好一些.

上一篇 下一篇

猜你喜欢

热点阅读