Things I Wish I Knew When I Started with React

things i wish i knew when i started with react

3 年 react 开发的经验教训

当我第一次投入 react 时,感觉就像打开了潘多拉魔盒。有很多东西要学,一路上,我遇到了很多“啊哈!”的情况。时刻。以下是我希望在开始时就知道的 10 件事,以帮助您在 react 之旅中跳过一些减速带。

1. 组件只是函数

最重要的认识是什么? react 组件只是 javascript 函数。你将 props 作为参数传递,它们返回 jsx,它看起来像 html,但事实并非如此。一旦您以这种方式思考组件,理解 props 和 state 等概念就会变得更加简单。

const mycomponent = (props) => {  return 

{props.title}

;};

2. state 和 props 不同

这现在看起来可能很基础,但在早期,props 和 state 之间的区别对我来说并不明显。这是一个快速回顾:

props 是外部的且不可变的(传递给组件的数据)。状态是内部的且可变的(在组件内管理)。

如有疑问:如果数据来自父级,那么它就是 props。如果数据存在于组件内部,那么它就是状态。

3. hooks 正在改变游戏规则

当 react 引入 hooks 时,它改变了游戏规则。您现在可以使用 usestate 和 useeffect 等挂钩轻松管理状态和副作用,而不是杂耍生命周期方法。我希望我从一开始就知道这些钩子可以让我的代码变得多么强大和简单。

const [count, setcount] = usestate(0);useeffect(() => {  document.title = `you clicked ${count} times`;}, [count]);

4. 了解虚拟 dom

直到后来我才完全理解 react 的 virtual dom 是如何工作的,这是一个错误。 react 的效率来自于更新虚拟 dom,而不是直接更新真实 dom。通过比较更改,react 仅更新必要的内容,从而使您的应用程序更快。

5. 组件组合优于继承

react 支持组件组合(将组件嵌套在彼此内部)而不是基于类的继承。如果您需要跨组件重用逻辑,最好将其提取到可重用组件或自定义挂钩中,而不是使用继承。

const greeting = ({name}) => 

hello, {name}!

;const page = () => ;

6. 管理状态是一门艺术

随着应用程序的增长,状态管理变得很棘手。本地组件状态适用于较小的应用程序,但对于较大的应用程序,context api 等工具或 redux 等库可帮助管理整个应用程序的状态。我开始使用 redux 太早了,但我现在知道在引入更重的工具之前何时应该依靠 usecontext 或 usereducer 等更简单的解决方案。

const mycontext = react.createcontext();const app = () => {  return (                );};

7. typescript 值得付出努力

如果您正在开发更大的代码库,那么采用 typescript 值得学习。它可以通过强制类型来尽早防止错误,并且可以使与其他开发人员的协作更加顺畅。一开始我对 typescript 很挣扎,但一旦我接受了它,我的 react 代码就变得更加健壮。

interface props {  title: string;}const mycomponent: react.fc = ({ title }) => {  return 

{title}

;};

8. 用于范围样式的 css-in-js

刚开始时,我一直在与相互冲突的全球风格作斗争。 css-in-js 库(例如 styled-components 或 emotion)通过允许作用域样式与组件逻辑共存,改变了我的游戏规则。

import styled from 'styled-components';const button = styled.button`  background: blue;  color: white;  padding: 10px;`;const app = () => ;

9. 测试比你想象的容易

测试 react 组件是令人生畏的,但像 react 测试库和 jest 这样的工具可以让这一切变得简单。为重要组件编写测试以确保它们按预期运行,稍后您会感谢自己。

import { render } from '@testing-library/react';import mycomponent from './mycomponent';test('renders the title', () => {  const { getbytext } = render();  expect(getbytext(/hello/i)).tobeinthedocument();});

10. 优化很重要

随着应用程序的扩展,您需要对其性能进行优化。记忆化 (react.memo)、延迟加载组件 (react.lazy) 和拆分代码 (react.suspense) 等技术可以极大地改善用户体验。性能对我来说并不是最重要的,但对你来说应该是最重要的!

const LazyComponent = React.lazy(() => import('./LazyComponent'));const App = () => (  <React.Suspense fallback={
Loading...
}> );

最后的想法

react 是一个用于构建动态 ui 的出色工具,但与任何技术一样,它也有一个学习曲线。拥抱基础知识,不要回避探索高级概念。最重要的是,继续建设!

这是我希望从一开始就知道的 10 件事。希望它们能为您的 react 之旅节省一些时间并减少挫败感。

这有帮助吗?发表评论或在下面分享您自己的 react 技巧!

以上就是Things I Wish I Knew When I Started with React的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1493090.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年12月19日 15:23:30
下一篇 2025年12月19日 15:23:46

相关推荐

  • JavaScript Electron桌面应用

    答案:使用JavaScript开发%ignore_a_1%桌面应用需结合Web技术与Node.js,通过主进程管理窗口、渲染进程展示界面,并利用IPC通信,调用系统功能如文件对话框,最后用electron-builder打包发布,注意安全与进程职责分离。 用JavaScript开发Electron桌…

    2025年12月20日
    000
  • 浏览器渲染机制与JavaScript性能调优

    浏览器渲染流程包括DOM构建、CSSOM构建、渲染树生成、布局、绘制和合成,JavaScript通过阻塞解析、频繁DOM操作、强制同步布局和长任务影响渲染性能,导致卡顿。优化策略有减少DOM操作、避免强制同步布局、使用requestAnimationFrame、事件防抖节流、异步分割任务及利用CSS…

    2025年12月20日
    000
  • JavaScript实现列表搜索过滤与高亮显示教程

    本教程详细介绍了如何使用javascript实现一个动态搜索功能,该功能允许用户在输入框中键入字符时,实时过滤列表项并高亮显示匹配的文本。文章涵盖了html结构、css样式以及核心javascript逻辑,包括事件监听、文本处理、正则匹配和dom操作,旨在帮助开发者构建交互性强的搜索界面。 在现代W…

    2025年12月20日
    000
  • 控制网页闪屏动画的会话级播放策略

    本文旨在解决网页闪屏动画(Splash Screen)在用户关闭页面后未能按预期重置的问题。通过对比`localStorage`和`sessionStorage`这两种浏览器存储机制的特性,我们将深入探讨如何利用`sessionStorage`实现闪屏动画在每个浏览器会话开始时播放一次,并在会话结束…

    2025年12月20日
    000
  • 实现HTML拖放图片替换功能的教程

    本文旨在指导开发者如何使用HTML Drag and Drop API实现一个图片拖放替换功能。通过监听`dragstart`、`dragover`和`drop`事件,并结合`replaceWith`方法,可以轻松实现将一个图片拖放到另一个图片上,并替换目标图片的效果。同时,本文还提供了优化的CSS…

    2025年12月20日
    000
  • 使用 sessionStorage 实现网页闪屏动画的会话级控制与重置

    本文将指导您如何利用 `sessionstorage` api 精确控制网页闪屏动画的播放行为。通过将闪屏状态存储在会话存储中,您可以确保动画在用户首次访问页面时播放一次,并在关闭浏览器标签页或窗口后自动重置,从而在下次访问时重新显示闪屏,有效解决了 `localstorage` 导致的动画永久不显…

    2025年12月20日
    000
  • JavaScript动画中CSS left和right属性的过渡冲突与解决方案

    本文深入探讨了javascript驱动css动画中,当同时使用`left`和`right`属性进行水平定位时,可能导致过渡失效的问题。通过分析浏览器如何处理这些属性,文章提供了一种解决方案:在动画过程中统一使用单一的水平定位属性(如`right`或`left`),从而确保动画平滑执行,并提供了详细的…

    2025年12月20日
    000
  • 如何编写通用的 JavaScript 弹窗函数

    本文旨在提供一种通用的 JavaScript 弹窗函数解决方案,避免重复编写类似代码。通过将弹窗 ID 作为参数传递,并结合classList的添加和移除功能,实现一个可复用的弹窗控制函数,简化弹窗功能的开发和维护。 在前端开发中,弹窗功能非常常见。如果每个弹窗都编写独立的打开和关闭函数,会导致代码…

    2025年12月20日
    000
  • Node.js readline 模块使用问题排查及解决方案

    本文旨在帮助开发者解决在使用 Node.js `readline` 模块时遇到的 “执行 node 文件没有反应” 的问题。文章将分析常见原因,提供修改后的代码示例,并给出使用 `readline` 模块的注意事项,确保程序能够正确运行并与用户进行交互。 在使用 Node.j…

    2025年12月20日
    000
  • JavaScript实现动态搜索过滤与关键词高亮显示

    本教程详细介绍了如何利用javascript、html和css构建一个交互式搜索功能。通过实时监听用户输入,该功能能够动态过滤列表项,并对匹配的关键词进行高亮显示,从而显著提升用户在大量数据中查找信息的效率和体验。 引言 在现代Web应用中,为用户提供高效的数据搜索和筛选能力是提升用户体验的关键。本…

    2025年12月20日
    000
  • 使用JavaScript实现动态搜索过滤与文本高亮显示

    本文详细介绍了如何利用javascript、html和css实现一个动态搜索功能。该功能允许用户在输入框中键入关键词时,实时过滤列表项并高亮显示所有匹配的文本片段,无论其在字符串中的位置如何,从而提升用户体验和数据可读性。 前言 在现代Web应用中,提供高效的数据检索和展示是提升用户体验的关键。当面…

    2025年12月20日
    000
  • 在StackEditor中集成LaTeX数学公式的探索与实践

    本文探讨了在stackexchange的markdown编辑器(stacks editor)中集成latex数学公式支持的挑战。尽管stacks editor提供了强大的markdown编辑功能,但其核心版本并未原生支持latex数学渲染。文章将回顾编辑器的基本配置,并指出其在数学公式方面的局限性,…

    2025年12月20日
    000
  • Laravel AJAX路由参数传递陷阱与500错误排查指南

    本文深入探讨了在laravel ajax应用中,因路由参数传递不当导致500错误的常见问题。重点分析了`route()`辅助函数在处理单个动态参数时的易错点,并提供了两种有效的解决方案:将参数封装为数组传递,或将路由名称与参数分别拼接。此外,文章还强调了调试此类问题的关键步骤和最佳实践,旨在帮助开发…

    2025年12月20日
    000
  • 如何在JavaScript中获取浏览器外观设置中的默认字体大小

    本文详细介绍如何使用javascript编程获取用户在浏览器外观设置中配置的默认字体大小。通过创建临时dom元素并利用`getcomputedstyle`的`initial`值,开发者可以准确地识别这一关键用户偏好,从而优化网页的响应式设计和可访问性,确保内容更好地适应不同用户的视觉需求。 在现代网…

    2025年12月20日
    000
  • 如何实现一个支持条件编译的构建工具?

    答案:实现条件编译构建工具需定义注释语法标记条件代码块,通过预处理器解析#if等指令并基于配置变量判断保留逻辑,利用栈处理嵌套结构,安全求值表达式后输出筛选代码,集成到构建流程前端实现编译期裁剪,支持命令行或配置传入变量并提供调试输出。 实现一个支持条件编译的构建工具,核心在于在编译前根据配置或环境…

    2025年12月20日
    000
  • 跨平台JavaScript移动应用开发

    首选JavaScript开发跨平台移动应用因一套代码适配iOS和Android,降低成本;React Native凭借原生组件、热重载和丰富生态成为主流,适合中大型项目;若坚持使用JavaScript或TypeScript,应选React Native、Ionic或Capacitor;Flutter…

    2025年12月20日
    000
  • Stacks-Editor:LaTeX数学支持的探索与替代方案

    本文探讨了在Stack Overflow的Markdown编辑器(Stacks-Editor)中集成LaTeX数学渲染功能的需求。通过分析其现有实现,我们发现Stacks-Editor本身不直接支持LaTeX。文章将回顾编辑器的基本配置,并介绍一个支持LaTeX的在线Markdown编辑器Stack…

    2025年12月20日
    000
  • JavaScript实现列表实时搜索过滤与关键词高亮显示

    本教程将详细介绍如何使用javascript、html和css构建一个实用的实时搜索功能。用户在搜索框输入内容时,列表项会即时根据输入进行过滤,同时匹配的关键词会在列表中以高亮形式显示,从而提供直观高效的用户体验。文章将涵盖html结构搭建、css样式美化以及javascript核心逻辑实现,包括d…

    2025年12月20日
    000
  • 解决JavaScript动画中CSS定位属性冲突导致的过渡失效问题

    本文深入探讨javascript驱动的css动画中,因同时操作`left`和`right`等冲突定位属性而导致过渡效果失效的常见问题。通过分析一个具体的卡片移动动画案例,揭示了浏览器在处理此类冲突时的行为,并提供了使用单一定位属性进行平滑过渡的解决方案及最佳实践,确保动画的流畅执行。 在前端开发中,…

    2025年12月20日
    000
  • 解决Laravel AJAX点赞系统中的500错误:路由参数传递详解

    本文详细阐述了在Laravel AJAX点赞系统中遇到500错误时的排查与解决策略,核心聚焦于`route()`辅助函数在JavaScript中传递路由参数的正确方法。通过提供两种修正方案,并结合实际代码示例,帮助开发者避免常见的参数传递错误,确保AJAX请求顺利执行,提升应用稳定性。 在构建现代W…

    2025年12月20日
    000

发表回复

登录后才能评论
关注微信