iis服务器助手广告广告
返回顶部
首页 > 资讯 > 前端开发 > VUE >怎么编写更好的React代码
  • 258
分享到

怎么编写更好的React代码

2024-04-02 19:04:59 258人浏览 薄情痞子
摘要

这篇文章主要介绍“怎么编写更好的React代码”,在日常操作中,相信很多人在怎么编写更好的React代码问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”怎么编写更好的React

这篇文章主要介绍“怎么编写更好的React代码”,在日常操作中,相信很多人在怎么编写更好的React代码问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”怎么编写更好的React代码”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

1. 解构 props

js 中解构对象(尤其是 props)可以大大减少代码中的重复。看下面的例子:

//Parent Component import React from 'react';  import CoffeeCard from './CoffeeCard';  const CafeMenu = () => {     const coffeeList = [         {             id: '0',             name: 'Espresso',             price: '2.00',             size: '16'         },         {             id: '1',             name: 'Cappuccino',             price: '3.50',             size: '24'         },         {             id: '2',             name: 'Caffee Latte',             price: '2.70',             size: '12'         }     ];      return coffeeList.map(item => (         <CoffeeCard key={item.id} coffee={item} />     )); };  export default CafeMenu;

CafeMenu 组件用于存储可用饮料的列表,现在我们想要创建另一个可以显示一种饮料的组件。如果不对 props  进行解构,我们的代码将像下面这样:

//Child Component import React from 'react';  const CoffeeCard = props => {     return (         <div>             <h2>{props.coffee.name}</h2>             <p>Price: {props.coffee.price}$</p>             <p>Size: {props.coffee.size} oz</p>         </div>     ); };  export default CoffeeCard;

如你所见,它看起来并不好,每次我们需要获取某个属性时,都要重复 props.coffee,幸运的是,我们可以通过解构来简化它。

//Child Component (after destructuring props) import React from 'react';  const CoffeeCard = props => {     const { name, price, size } = props.coffee;     return (         <div>             <h2>{name}</h2>             <p>Price: {price}$</p>             <p>Size: {size} oz</p>         </div>     ); };  export default CoffeeCard;

如果我们想将大量参数传递给子组件,我们还可以直接在构造函数(或函数组件的参数)中解构 props。比如:

//Parent Component import React from 'react';  import ContactInfo from './ContactInfo';  const UserProfile = () => {     const name = 'John Locke';     const email = 'john@locke.com';     const phone = '01632 960668';      return <ContactInfo name={name} email={email} phone={phone} />; };  export default UserProfile; //Child Component import React from 'react';  const ContactInfo = ({ name, email, phone }) => {     return (         <div>             <h2>{name}</h2>             <p> E-mail: {email}</p>             <p> Phone: {phone}</p>         </div>     ); };  export default ContactInfo;

2. 保持导入模块的顺序

有时(尤其是在“容器组件”中),我们需要使用许多不同的模块,并且组件导入看上去有些混乱,如:

import { Auth } from 'aws-amplify'; import React from 'react'; import SidebarNavigation from './components/SidebarNavigation'; import { EuiPage, EuiPageBody } from '@elastic/eui'; import { keyCodes } from '@elastic/eui/lib/services'; import './index.CSS' import HeaderNavigation from './components/HeaderNavigation'; import Routes from './Routes';

关于导入模块的理想顺序有很多不同的观点。我建议多参考,然后找到适合你自己的那种。

至于我自己,我通常按类型对导入进行分组,并按字母顺序对它们进行排序(这是可选操作)。我也倾向于保持以下顺序:

  1. 鸿蒙官方战略合作共建——HarmonyOS技术社区

  2. 标准模块

  3. 第三方模块

  4. 自己代码导入(组件)

  5. 特定于模块的导入(例如CSS,PNG等)

  6. 仅用于测试的代码

快速重构一下,我们的模块导入看上去舒服多了了。

import React from 'react';  import { Auth } from 'aws-amplify'; import { EuiPage, EuiPageBody } from '@elastic/eui'; import { keyCodes } from '@elastic/eui/lib/services';  import HeaderNavigation from './components/HeaderNavigation'; import SidebarNavigation from './components/SidebarNavigation'; import Routes from './Routes';  import './index.css'

3.使用 Fragments

在我们的组件中,我们经常返回多个元素。一个 React 组件不能返回多个子节点,因此我们通常将它们包装在 div  中。有时,这样的解决方案会有问题。比如下面的这个例子中:

我们要创建一个 Table 组件,其中包含一个 Columns 组件。

import React from 'react';  import Columns from './Columns';  const Table = () => {     return (         <table>             <tbody>                 <tr>                     <Columns />                 </tr>             </tbody>         </table>     ); };  export default Table;

Columns 组件中包含一些 td 元素。由于我们无法返回多个子节点,因此需要将这些元素包装在 div 中。

import React from 'react';  const Columns = () => {     return (         <div>             <td>Hello</td>             <td>World</td>         </div>     ); };  export default Columns;

然后就报错了,因为tr 标签中不能放置 div。我们可以使用 Fragment 标签来解决这个问题,如下所示:

import React, { Fragment } from 'react'; const Columns = () => {     return (         <Fragment>             <td>Hello</td>             <td>World</td>         </Fragment>     ); };  export default Columns;

我们可以将 Fragment 视为不可见的 div。它在子组件将元素包装在标签中,将其带到父组件并消失。

你也可以使用较短的语法,但是它不支持 key 和属性。

import React from 'react';  const Columns = () => {     return (         <>             <td>Hello</td>             <td>World</td>         </>     ); }; export default Columns;

4. 使用展示组件和容器组件

将应用程序的组件分为展示(木偶)组件和容器(智能)组件。如果你不知道这些是什么,可以下面的介绍:

展示组件

  • 主要关注UI,它们负责组件的外观。

  • 数据由 props 提供,木偶组件中不应该调用api,这是智能组件的工作

  • 除了UI的依赖包,它们不需要依赖应用程序

  • 它们可能包括状态,但仅用于操纵UI本身-它们不应存储应用程序数据。

木偶组件有:加载指示器,模态,按钮,输入。

容器组件

  • 它们不关注样式,通常不包含任何样式

  • 它们用于处理数据,可以请求数据,捕获更改和传递应用程序数据

  • 负责管理状态,重新渲染组件等等

  • 可能依赖于应用程序,调用 Redux,生命周期方法,API和库等等。

使用展示组件和容器组件的好处

  • 更好的可读性

  • 更好的可重用性

  • 更容易测试

此外,它还符合“单一责任原则” - 一个组件负责外观,另一个组件负责数据。

示例

让我们看一个简单的例子。这是一个 BookList 组件,该组件可从API获取图书数据并将其显示在列表中。

import React, { useState, useEffect } from 'react';  const BookList = () => {     const [books, setBooks] = useState([]);     const [isLoading, setLoading] = useState(false);      useEffect(() => {         setLoading(true);         fetch('api/books')             .then(res => res.JSON())             .then(books => {                 setBooks(books);                 setLoading(false);             });     }, []);      const renderLoading = () => {         return <p>Loading...</p>;     };      const renderBooks = () => {         return (             <ul>                 {books.map(book => (                     <li>{book.name}</li>                 ))}             </ul>         );     };      return <>{isLoading ? renderLoading() : renderBooks()}</>; }; export default BookList;

该组件的问题在于,它负责太多事情。它获取并呈现数据。它还与一个特定的接口关联,因此在不复制代码的情况下,不能使用此组件显示特定用户的图书列表。

现在,让我们尝试将此组件分为展示组件和容器组件。

import React from 'react';  const BookList = ({ books, isLoading }) => {     const renderLoading = () => {         return <p>Loading...</p>;     };      const renderBooks = () => {         return (             <ul>                 {books.map(book => (                     <li key={book.id}>{book.name}</li>                 ))}             </ul>         );     };      return <>{isLoading ? renderLoading() : renderBooks()}</>; }; export default BookList; import React, { useState, useEffect } from 'react'; import BookList from './BookList';  const BookListContainer = () => {     const [books, setBooks] = useState([]);     const [isLoading, setLoading] = useState(false);      useEffect(() => {         setLoading(true);         fetch('/api/books')             .then(res => res.json())             .then(books => {                 setBooks(books);                 setLoading(false);             });     }, []);      return <BookList books={books} isLoading={isLoading} />; };  export default BookListContainer;

5. 使用 styled-components

对 React 组件进行样式设置一直是个难题。查找拼写错误的类名,维护大型 CSS  文件,处理兼容性问题有时可能很痛苦。

styled-components 是一个常见的 css in js 类库,和所有同类型的类库一样,通过 js 赋能解决了原生 css  所不具备的能力,比如变量、循环、函数等。

要开始使用 styled-components,你需要首先安装依赖:

npm i styled-components

下面是一个示例:

import React from 'react'; import styled from 'styled-components';  const Grid = styled.div`     display: flex; `;  const Col = styled.div`     display: flex;     flex-direction: column; `;  const MySCButton = styled.button`     background: ${props => (props.primary ? props.mainColor : 'white')};     color: ${props => (props.primary ? 'white' : props.mainColor)};     display: block;     font-size: 1em;     margin: 1em;     padding: 0.5em 1em;     border: 2px solid ${props => props.mainColor};     border-radius: 15px; `;  function App() {     return (         <Grid>             <Col>                 <MySCButton mainColor='#ee6352' primary>My 1st Button</MySCButton>                 <MySCButton mainColor='#ee6352'>My 2st Button</MySCButton>                 <MySCButton mainColor='#ee6352'>My 3st Button</MySCButton>             </Col>             <Col>                 <MySCButton mainColor='#515052' primary>My 4st Button</MySCButton>                 <MySCButton mainColor='#515052'>My 5st Button</MySCButton>                 <MySCButton mainColor='#515052'>My 6st Button</MySCButton>             </Col>         </Grid>     ); }  export default App;

这只是样式化组件如何工作的一个简单示例,但是它们可以做的还远远不止这些。你可以在其官方文档中了解有关样式化组件的更多信息。

到此,关于“怎么编写更好的React代码”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注编程网网站,小编会继续努力为大家带来更多实用的文章!

--结束END--

本文标题: 怎么编写更好的React代码

本文链接: https://www.lsjlt.com/news/85033.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 怎么编写更好的React代码
    这篇文章主要介绍“怎么编写更好的React代码”,在日常操作中,相信很多人在怎么编写更好的React代码问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”怎么编写更好的React...
    99+
    2024-04-02
  • 怎么编写更好的JS代码
    这篇文章主要介绍“怎么编写更好的JS代码”,在日常操作中,相信很多人在怎么编写更好的JS代码问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”怎么编写更好的JS代码”的疑惑有所帮...
    99+
    2024-04-02
  • react dva实现的代码怎么编写
    今天就跟大家聊聊有关react dva实现的代码怎么编写,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。dvadva是一个基于redux和redux-saga的数据流方案,然后为了简化...
    99+
    2023-06-25
  • 编写更简洁React代码的技巧有哪些
    这篇文章主要介绍“编写更简洁React代码的技巧有哪些”,在日常操作中,相信很多人在编写更简洁React代码的技巧有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”编写更简洁React代码的技巧有哪些”的疑...
    99+
    2023-07-04
  • 怎么编写更好的CSS
    这篇文章主要介绍“怎么编写更好的CSS”,在日常操作中,相信很多人在怎么编写更好的CSS问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”怎么编写更好的CSS”的疑惑有所帮助!接...
    99+
    2024-04-02
  • 如何编写简洁的React代码
    这篇文章给大家介绍如何编写简洁的React代码,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。只对一个条件进行条件性渲染如果你需要在一个条件为真时有条件地呈现一些东西,在一个条件为假时不...
    99+
    2024-04-02
  • 怎么更好的进行C++代码编译
    这期内容当中小编将会给大家带来有关怎么更好的进行C++代码编译,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。在刚刚刚开始学C++代码时遇到一个问题,这个问题导致程序不能够完全的进行运行,看完本文后对您一定...
    99+
    2023-06-17
  • 有哪些技巧编写出更好的Python代码
    这篇文章主要讲解了“有哪些技巧编写出更好的Python代码”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“有哪些技巧编写出更好的Python代码”吧!1. 使用enumerate()而不是ra...
    99+
    2023-06-16
  • Python有哪些技巧能编写更好的代码
    这篇文章主要讲解了“Python有哪些技巧能编写更好的代码”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Python有哪些技巧能编写更好的代码”吧!技巧01-变量的多重分配Python允许我...
    99+
    2023-06-16
  • 10 个编写更简洁React代码的实用小技巧
    本篇文章给大家整理分享 10 个编写更简洁 React 代码的实用小技巧,希望对大家有所帮助!1. JSX 简写如何将 true 值传递给给定的 props?【相关推荐:Redis视频教程、编程视频】在下面的示例中,使用 prop show...
    99+
    2023-05-14
    前端 JavaScript React.js
  • 有哪些Python技巧用于编写更好的代码
    这篇文章主要讲解了“有哪些Python技巧用于编写更好的代码”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“有哪些Python技巧用于编写更好的代码”吧!1. F StringF字符串为将Py...
    99+
    2023-06-16
  • 怎么写好的Python代码
    本篇内容介绍了“怎么写好的Python代码”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!所谓 pythonic,我觉得包含两方面:一是代码的...
    99+
    2023-06-02
  • Linux下的PHP IDE:如何更好地编写对象代码?
    随着Web应用的不断发展,PHP作为一种强大的服务器端语言,越来越受到程序员们的欢迎。而在Linux系统中,PHP的开发工具也越来越多,其中PHP IDE是最为常用的一种。那么,在Linux下如何更好地编写对象代码呢?本文将为大家介绍一些...
    99+
    2023-07-05
    ide linux 对象
  • 怎样更好的进行C++代码编制
    怎样更好的进行C++代码编制,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。想要充分的掌握C++编程技术,那么就要对C++中的结构、语句、变量、函数、预处理指令、输入和输出等内容...
    99+
    2023-06-17
  • 了解 VSCode 如何帮助你更好地编写代码
    标题:探索VSCode如何助你更优秀编程技巧 在当今的数字化时代,编程已经成为了人们生活和工作中不可或缺的技能。而一款优秀的代码编辑器则是每位开发者必备的利器。在众多的代码编辑器中,V...
    99+
    2024-04-02
  • pycharm怎么编写代码
    如何使用 pycharm 编写代码?创建新项目并文件,在代码编辑器中编写代码。使用代码提示和自动完成功能,提高编写效率。通过运行代码验证其功能。设置断点并使用调试工具进行代码调试。集成版...
    99+
    2024-04-18
    linux python git pycharm
  • JavaScript 安全编码技巧:编写更安全的代码
    1. 使用严格模式 严格模式是 JavaScript 的一种语法,它可以帮助你编写更安全的代码。严格模式下,JavaScript 引擎会更加严格地执行代码,并会抛出一些在非严格模式下不会抛出的错误。例如,在严格模式下,你不能使用未声明的...
    99+
    2024-02-04
    JavaScript 安全编码 安全编码技巧 安全代码 Web 安全
  • 如何编写更好的CSS
    这篇文章主要为大家展示了“如何编写更好的CSS”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“如何编写更好的CSS”这篇文章吧。 1.减少深远的风格 请小心设...
    99+
    2024-04-02
  • 学习 PHP 数据类型:如何在 Apache 中编写更好的代码?
    PHP 是一种广泛使用的服务器端编程语言,也是 Apache Web 服务器中最受欢迎的语言之一。在编写 PHP 代码时,了解 PHP 数据类型及其使用方式非常重要。在本文中,我们将探讨 PHP 数据类型的基础知识以及如何在 Apache ...
    99+
    2023-10-06
    数据类型 教程 apache
  • 怎么编写高效的TS代码
    这篇文章主要介绍“怎么编写高效的TS代码”,在日常操作中,相信很多人在怎么编写高效的TS代码问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”怎么编写高效的TS代码”的疑惑有所帮...
    99+
    2024-04-02
软考高级职称资格查询
推荐阅读
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作