ZBLOG

import React, { useEffect, useState } from 'react' import './index.less' import Contact from './contact' import { initContact } from '@/api/handlers/common.api' import { initDataOrigin } from './mock' import hua from '@hweb/hua-js' import Services...

以下是对你提供的 React 组件代码进行了一些优化和清理,以提高可读性和性能:

import React, { useEffect, useState } from 'react';
import './index.less';
import Contact from './contact';
import { initContact } from '@/api/handlers/common.api';
import { initDataOrigin } from './mock';
import hua from '@hweb/hua-js';
import ServicesDesc from './servicesDesc/servicesDesc';
import Empty from './empty';

const Home = (props) => {
  const [initDataContent, setInitDataContent] = useState(null);
  const [loading, setLoading] = useState(true);

  useEffect(() => {
    hua.setNavigationBarTitle('联系酒店');

    const fetchData = async () => {
      const params = {
        hotelId: props?.query?.hotelId,
      };

      // Remove any undefined parameters
      Object.keys(params).forEach(key => {
        if (!params[key]) delete params[key];
      });

      try {
        const res = await initContact(params);
        if (res?.businessCode === '1000') {
          console.log('initDataOrigin', initDataOrigin);
          setInitDataContent(res.content);
        }
      } catch (error) {
        console.error("Error fetching contact data:", error);
      } finally {
        setLoading(false);
        // $tools.loading.close(); // Uncomment this line if you have loading logic in place
      }
    };

    fetchData();
  }, [props.query.hotelId]); // Add dependency for hotelId to refetch on change

  const renderPage = () => {
    if (loading) return <div>正在加载中.............</div>;

    if (initDataContent) {
      if (initDataContent.hotelStatus === '1') {
        return (
          <>
            <div className="home-backgroundImg">
              <Contact content={initDataContent} />
              <ServicesDesc serviceIntroductionList={initDataContent.serviceIntroductionList} />
            </div>
            <div className="footer">
              <div
                className="footer-btn"
                onClick={() => $tools.handleToService(props.query.hotelId)}
              >
                前往服务频道,使用服务
              </div>
            </div>
          </>
        );
      } else {
        return <Empty />;
      }
    }

    return null; // Return null or a default component when there's no content.
  };

  return <div className="home">{renderPage()}</div>;
};

export default Home;

优化点:

  1. 异步函数:将数据获取逻辑放入一个异步函数 fetchData 中,这样代码更整洁。
  2. 参数过滤:使用 Object.keys() 方法简化了去除未定义参数的逻辑。
  3. 错误处理:在 API 调用时添加了 try-catch 来捕获可能的错误。
  4. 条件渲染:如果还没有获取到内容且正在加载,就返回加载中的提示,而不是直接调用 renderPage()
  5. 依赖项数组:在 useEffect 的依赖项中添加了 props.query.hotelId,这样可以在酒店 ID 改变时重新获取数据。

这些改动旨在提升代码的可读性、可维护性以及潜在的性能表现。


内容由零声教学AI助手提供,问题来源于学员提问

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://golang.0voice.com/?id=20855

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?