当前位置:首页 > 前端开发 > 正文内容

日常工作中需求防止的9个React坏习惯

邻居的猫1个月前 (12-09)前端开发592

前语

React是前端开发范畴中最受欢迎的JavaScript库之一,但有时分在编写React应用程序时,或许堕入一些欠安的习气和错误做法。这些欠安的习气或许导致功用下降、代码难以保护,以及其他问题。在本文中,咱们将讨论日常作业中应该防止的9个坏React习气,并供给相关示例代码来阐明这些问题以及怎么防止它们。

1. 特点传递问题(Prop Drilling)

特点传递问题是一种常见的不良习气,它发生在将特点从一个组件传递到多层嵌套的子组件时。这或许导致功用问题和代码可读性下降。抱负状况下,应该尽量防止将特点传递超越2层。下面是一个示例:

// 父组件
function ParentComponent() {
  const data = 'Some data';

  return (
	<ChildComponent data={data} />
  );
}

// 子组件
function ChildComponent({ data }) {
  return (
	<GrandchildComponent data={data} />
  );
}

// 孙子组件
function GrandchildComponent({ data }) {
  // 运用数据
  return <div>{data}</div>;
}

在上面的示例中,data特点经过多个嵌套层级传递,这或许导致功用问题和可读性问题。处理这个问题的办法之一是运用React的上下文(context)来同享数据,或许从头组织组件结构。

2. 导入过多所需的内容

React应用程序中,导入过多的依靠项或许会导致包变得巨大,然后增加加载时刻。在日常作业中,保证只导入需求的依靠项。例如,防止导入整个库,而只导入所需的功用。

// 不良示例 - 导入整个库
import _ from 'lodash';

// 杰出示例 - 只导入所需的功用
import { someFunction } from 'lodash';

这有助于减小包的巨细,进步应用程序功用。

3. 不将事务逻辑与组件逻辑别离

React中,尽量将事务逻辑与UI组件逻辑分隔,以进步代码的可读性和可保护性。将事务逻辑提取到独立的服务文件或模块中,以使组件坚持简略。以下是一个示例:

// 不良示例 - 事务逻辑稠浊在组件中
function UserProfile() {
  const user = getUserData(); // 从API获取用户数据

  return (
	<div>
	  <h1>{user.name}</h1>
	  <p>{user.email}</p>
	</div>
  );
}

// 杰出示例 - 事务逻辑别离
function UserProfile() {
  const user = useUserData(); // 从独立服务获取用户数据

  return (
	<div>
	  <h1>{user.name}</h1>
	  <p>{user.email}</p>
	</div>
  );
}

经过将事务逻辑提取到独立的useUserData函数中,使组件愈加明晰和可保护。

4. 在每次烘托时重复履行作业

React组件或许会在不同时刻点从头烘托,假如不小心,某些作业或许会在每次烘托时都重复履行,这会下降功用。为了防止这种状况,能够运用useMemouseCallback来回忆化操作,以便它们不会在每次烘托时从头核算。以下是一个示例:

function List({ items }) {
  // 不运用useMemo - 每次烘托都会从头过滤
  const filteredItems = items.filter(item => item.active);

  // 运用useMemo - 只在items发生变化时从头过滤
  const filteredItems = useMemo(() => items.filter(item => item.active), [items]);
}

经过运用useMemo,能够防止在每次烘托时从头核算filteredItems,然后进步功用。

5. 不正确运用useEffect钩子

useEffect钩子用于处理副作用,但假如不正确运用它,或许会导致创立多个事情监听器,这会引发问题。正确运用useEffect的办法包含将整理函数回来以撤销订阅,以及运用空的依靠数组以保证只运转一次。以下是一个示例:

// 不良示例 - 每次烘托都会创立新的事情监听器
useEffect(() => {
  window.addEventListener('resize', handleResize);
  return () => {
	window.removeEventListener('resize', handleResize);
  };
});

// 杰出示例 - 只在组件挂载时创立事情监听器
useEffect(() => {
  window.addEventListener('resize', handleResize);
	return () => {
	  window.removeEventListener('resize', handleResize);
	};
  }, []); // 空的依靠数组

经过运用空的依靠数组,保证了事情监听器只在组件挂载时创立一次。

6. 不正确运用布尔运算符

React组件中,常常需求依据条件来烘托不同的内容。但是,不正确运用布尔运算符或许会导致意外的问题。例如:

// 不良示例 - 运用 && 运算符
function ShoppingCart({ items }) {
  return (
	<div>
	  {items.length && <p>Items in cart: {items.length}</p>}
	</div>
  );
}

在上述示例中,当items.length0时,<p>元素将不会烘托,这或许不是咱们希望的成果。为了防止这种状况,最好将条件转化为布尔值,如下所示:

// 杰出示例 - 运用Boolean()将条件转换为布尔值
function ShoppingCart({ items }) {
  return (
	<div>
	  {Boolean(items.length) && <p>Items in cart: {items.length}</p>}
	</div>
  );
}

经过将条件转换为布尔值,咱们能够保证<p>元素按预期烘托。

7. 处处运用三元表达式进行条件烘托

三元表达式是一种强壮的条件烘托东西,但乱用它或许会导致代码难以阅览。特别是当多个三元表达式嵌套在一起时,代码会变得紊乱。考虑以下示例:

// 不良示例 - 多个嵌套的三元表达式
function UserProfile({ user, isAdmin, isOwner }) {
  return (
	<div>
	  {isAdmin ? (
		<p>Admin</p>
	  ) : isOwner ? (
		<p>Owner</p>
	  ) : (
		<p>User</p>
	  )}
	</div>
  );
}

在上述示例中,多个三元表达式嵌套在一起,使代码难以了解。为了进步可读性,能够考虑运用函数或组件来替代三元表达式。以下是一个改善的示例:

// 杰出示例 - 运用函数替代三元表达式
function UserProfile({ user, isAdmin, isOwner }) {
  function getUserRole() {
	if (isAdmin) {
	  return 'Admin';
	} else if (isOwner) {
	  return 'Owner';
	} else {
	  return 'User';
	}
  }

  return (
	<div>
	  <p>{getUserRole()}</p>
	</div>
  );
}

经过运用函数,咱们使代码更易读和保护。

8. 不界说特点类型或不解构特点

为组件的特点界说类型和解构特点是一种杰出的实践,它有助于进步代码的可保护性和稳定性。在日常作业中,咱们应该运用PropTypesTypeScript等东西来为特点增加类型界说,并解构特点以使其更明晰。以下是一个示例:

// 不良示例 - 未界说特点类型和未解构特点
function Person(props) {
  return (
	<div>
	  <p>Name: {props.name}</p>
	  <p>Age: {props.age}</p>
	</div>
  );
}

// 杰出示例 - 界说特点类型和解构特点
import PropTypes from 'prop-types';

function Person({ name, age }) {
  return (
	<div>
	  <p>Name: {name}</p>
	  <p>Age: {age}</p>
	</div>
  );
}

Person.propTypes = {
  name: PropTypes.string,
  age: PropTypes.number,
};

经过界说特点类型和解构特点,能够进步代码的可读性,并在特点类型错误时取得正告。

9. 较大的应用程序没进行代码拆分

关于大型React应用程序,应该考虑运用代码拆分(Code Splitting)以进步初始加载功用。代码拆分答应将代码分割为较小的块,这些块能够在需求时加载,然后减小初始包的巨细。以下是一个示例:

import Loadable from 'react-loadable';

const AsyncComponent = Loadable({
  loader: () => import('./AsyncComponent'),
  loading: () => <div>Loading...</div>,
});

function App() {
  return (
	<div>
	  <AsyncComponent />
	</div>
  );
}

经过运用代码拆分,能够进步应用程序的加载速度,特别是关于较大的应用程序。

定论

React开发中,防止这九个不良习气能够进步代码质量、功用和可保护性。经过运用示例代码来阐明这些问题以及怎么防止它们,能够协助咱们在日常作业中编写更高质量的React应用程序。

扫描二维码推送至手机访问。

版权声明:本文由51Blog发布,如需转载请注明出处。

本文链接:https://www.51blog.vip/?id=449

分享给朋友:

“日常工作中需求防止的9个React坏习惯” 的相关文章

html制作网页案例代码,html代码大全可复制

html制作网页案例代码,html代码大全可复制

创建一个简单的HTML网页是一个很好的起点。以下是一个基本的HTML网页示例,包括一些常见的元素,如标题、段落、链接、图片和列表。你可以根据这个示例来创建自己的网页。```html 我的第一个网页 欢迎来到我的第一个网页 这是一个段落。段落是用来描述一些信息的。...

css自适应布局, 什么是CSS自适应布局?

css自适应布局, 什么是CSS自适应布局?

CSS自适应布局(Responsive Web Design)是一种网页设计方法,旨在使网页能够在不同尺寸和分辨率的设备上提供良好的用户体验。这通常涉及到使用媒体查询(Media Queries)来根据设备的特性(如屏幕宽度、分辨率等)应用不同的CSS样式。1. 媒体查询(Media Queries...

css的选择器有哪些,css官网入口

css的选择器有哪些,css官网入口

1. 元素选择器:选择HTML文档中的所有指定元素。例如,`h1` 选择所有 `` 元素。2. 类选择器:选择具有指定类名的元素。类名由一个点(`.`)和一个或多个字母、数字、下划线或连字符组成。例如,`.myclass` 选择所有类名为 `myclass` 的元素。3. ID选择器:选择具有指定I...

css列表横向排列, 选择合适的CSS属性

css列表横向排列, 选择合适的CSS属性

在CSS中,要将列表项横向排列,可以使用以下几种方法:1. 浮动(Float):使用 `float: left;` 或 `float: right;` 属性可以让列表项并排显示。需要注意的是,浮动元素需要清除浮动,以避免父元素高度塌陷的问题。2. 内联块(Inlineblock):使用 `displ...

jquery 延时,寤舵椂

jquery 延时,寤舵椂

在 jQuery 中,你可以使用 `delay` 方法来实现延时功能。`delay` 方法可以延迟后续动画或效果的执行。其基本语法如下:```javascript$.delay;``` `duration`: 指定延迟的时间,单位为毫秒。 `queueName`: 可选参数,指定要延迟的动画队列的名...

html制作网页案例代码,html代码大全可复制

html制作网页案例代码,html代码大全可复制

创建一个简单的HTML网页是一个很好的起点。以下是一个基本的HTML网页示例,包括一些常见的元素,如标题、段落、链接、图片和列表。你可以根据这个示例来创建自己的网页。```html 我的第一个网页 欢迎来到我的第一个网页 这是一个段落。段落是用来描述一些信息的。...