您知道选择一门新语言或框架是什么感觉。 有时有很好的文档可以帮助您找到解决方法。 但即使是最好的文档也不能涵盖所有内容。 当您处理新事物时,您一定会发现没有书面解决方案的问题。
这就是我第一次创建 React 项目时的感受——React 是那些拥有出色文档的框架之一,尤其是现在有了 beta 文档。 但我仍然挣扎着走过来。 从那个项目开始已经有一段时间了,但我从中得到的教训仍然记忆犹新。 尽管那里有很多 React“how-to”教程,但我还是想分享一下我第一次使用它时希望知道的内容。
所以,这就是这篇文章的目的——列出我早期犯过的错误。 我希望它们能帮助你更顺利地学习 React。
使用 create-react-app 启动一个项目
TL;DR 使用 Vite 或 Parcel。
创建React应用程序 (CRA) 是一个帮助你建立一个新的 React 项目的工具。 它为大多数 React 项目创建了一个具有最佳配置选项的开发环境。 这意味着您不必花时间自己配置任何东西。
作为初学者,这似乎是我开始工作的好方法! 没有配置! 刚开始编码!
CRA 使用两个流行的包来实现这一点,webpack 和 Babel。 webpack 是一个网络打包器,可以优化项目中的所有资产,例如 JavaScript、CSS 和图像。 Babel 是一种允许您使用更新的 JavaScript 功能的工具,即使某些浏览器不支持它们。
两者都很好,但是有更新的工具可以更好地完成工作,特别是 螺丝钉 和 快速网页编译器 (SWC)。
这些新的和改进的替代品比 webpack 和 Babel 更快更容易配置。 这使得在不弹出的情况下更容易调整在 create-react-app 中很难做到的配置。
要在设置新的 React 项目时同时使用它们,你必须确保你有 Node 安装版本 12 或更高版本,然后运行以下命令。
npm create vite
您将被要求为您的项目选择一个名称。 完成后,从框架列表中选择 React。 之后,您可以选择 Javascript + SWC
or Typescript + SWC
然后你必须改变目录 cd
进入您的项目并运行以下命令;
npm i && npm run dev
这应该使用 URL 为您的站点运行开发服务器 localhost:5173
就这么简单。
defaultProps
默认值
运用 TL;DR 使用默认函数参数代替。
数据可以通过一个叫做 props
. 它们就像 HTML 元素中的属性一样被添加到组件中,并且可以通过从作为参数传入的 prop 对象中获取相关值来在组件的定义中使用。
// App.jsx
export default function App() { return <Card title="Hello" description="world" />
} // Card.jsx
function Card(props) { return ( <div> <h1>{props.title}</h1> <p>{props.description}</p> </div> );
} export default Card;
如果需要默认值 prop
是, defaultProp
可以使用属性:
// Card.jsx
function Card(props) { // ...
} Card.defaultProps = { title: 'Default title', description: 'Desc',
}; export default Card;
使用现代 JavaScript,可以解构 props
对象并在函数参数中为其全部分配一个默认值。
// Card.jsx
function Card({title = "Default title", description= "Desc"}) { return ( <div> <h1>{title}</h1> <p>{description}</p> </div> )
} export default Card;
这是更有利的,因为代码可以被现代浏览器读取而不需要额外的转换。
不幸, defaultProps
确实需要浏览器读取一些转换,因为开箱即用不支持 JSX(JavaScript XML)。 这可能会影响使用大量的应用程序的性能 defaultProps
.
propTypes
不要使用 TL;DR 使用 TypeScript。
在 React 中, propTypes
property 可用于检查组件是否为其 props 传递了正确的数据类型。 它们允许您指定应该用于每个 prop 的数据类型,例如字符串、数字、对象等。它们还允许您指定是否需要某个 prop。
这样,如果一个组件传递了错误的数据类型或者没有提供所需的 prop,那么 React 将抛出错误。
// Card.jsx
import { PropTypes } from "prop-types"; function Card(props) { // ...
} Card.propTypes = { title: PropTypes.string.isRequired, description: PropTypes.string,
}; export default Card;
打字稿 为传递给组件的数据提供一定程度的类型安全。 所以,当然, propTypes
在我刚开始的时候是个好主意。 然而,既然 TypeScript 已经成为类型安全的首选解决方案,我强烈建议使用它而不是其他任何东西。
// Card.tsx
interface CardProps { title: string, description?: string,
} export default function Card(props: CardProps) { // ...
}
TypeScript 是一种通过添加静态类型检查构建在 JavaScript 之上的编程语言。 TypeScript 提供了更强大的类型系统,可以捕获更多潜在的错误并改善开发体验。
使用类组件
TL;DR: 将组件写成函数
React 中的类组件是使用 JavaScript 类创建的。 它们具有更面向对象的结构以及一些附加功能,例如使用 this
关键字和生命周期方法。
// Card.jsx
class Card extends React.Component { render() { return ( <div> <h1>{this.props.title}</h1> <p>{this.props.description}</p> </div> ) }
} export default Card;
我更喜欢用类编写组件而不是函数,但是 JavaScript 类对于初学者来说更难理解和 this
会变得非常混乱。 相反,我建议将组件编写为函数:
// Card.jsx
function Card(props) { return ( <div> <h1>{props.title}</h1> <p>{props.description}</p> </div> )
} export default Card;
函数组件只是返回 JSX 的 JavaScript 函数。 它们更易于阅读,并且没有像 this
关键字和 生命周期方法 这使它们比类组件更高效。
函数组件也有使用钩子的优势。 反应钩 允许您在不编写类组件的情况下使用状态和其他 React 功能,从而使您的代码更具可读性、可维护性和可重用性。
不必要地导入 React
TL;DR:没有必要这样做,除非你需要钩子。
由于 React 17 于 2020 年发布,现在无需在创建组件时在文件顶部导入 React。
import React from 'react'; // Not needed!
export default function Card() {}
但我们必须在 React 17 之前这样做,因为 JSX 转换器(将 JSX 转换为常规 JavaScript 的东西)使用了一种名为 React.createElement
这仅在导入 React 时有效。 从那时起,一个新的转换器已经发布,它可以在没有 createElement
方法。
你仍然需要导入 React 来使用钩子, 片段,以及您可能需要从库中获取的任何其他函数或组件:
import { useState } from 'react'; export default function Card() { const [count, setCount] = useState(0); // ...
}
这些是我早期的错误!
也许“错误”这个词太苛刻了,因为后来出现了一些更好的做法。 尽管如此,我仍然看到很多实例,其中“旧”的做事方式仍在项目和其他教程中积极使用。
老实说,我在开始的时候可能犯了五个以上的错误。 每当您使用一种新工具时,它都更像是一次有效使用它的学习之旅,而不是按一下开关。 但这些是多年后我仍然随身携带的东西!
如果您已经使用 React 一段时间了,您希望在开始之前知道哪些事情? 如果能有一个系列来帮助其他人避免同样的困境,那就太好了。
- SEO 支持的内容和 PR 分发。 今天得到放大。
- 柏拉图区块链。 Web3 元宇宙智能。 知识放大。 访问这里。
- Sumber: https://css-tricks.com/5-mistakes-starting-react/
- :是
- $UP
- 1
- 11
- 2020
- 7
- 8
- 9
- 98
- a
- 对,能力--
- 关于
- 绝对
- 积极地
- 添加
- 额外
- 优点
- 影响
- 后
- 所有类型
- 允许
- 替代品
- 和
- 应用
- 应用领域
- 保健
- 论点
- 刊文
- AS
- 办公室文员:
- At
- 属性
- 避免
- 巴贝尔
- 背部
- BE
- 因为
- 成为
- before
- 初学者
- 初学者
- 作为
- 最佳
- 测试
- 更好
- 界
- 盒子
- 浏览器
- 浏览器
- 虫子
- 建立
- by
- 被称为
- CAN
- 可以得到
- 卡
- 携带
- 摔角
- 更改
- 查
- 程
- 类
- 码
- 采集
- 元件
- 组件
- 配置
- 扑朔迷离
- 可以
- 外壳
- 国税局
- 创建信息图
- 创建
- 创建
- 的CSS
- data
- 默认
- 描述
- 开发
- 研发支持
- 难
- 文件
- 不会
- 做
- 别
- 每
- 早
- 更容易
- 只
- 或
- element
- 环境
- 错误
- 特别
- 等
- 醚(ETH)
- 甚至
- EVER
- 一切
- 体验
- 出口
- 额外
- 快
- 特征
- 少数
- 文件
- 找到最适合您的地方
- 姓氏:
- 第一次
- 以下
- 针对
- 骨架
- 框架
- 新鲜
- 止
- 功能
- 功能
- 得到
- 越来越
- 去
- 非常好
- 大
- 有
- 帮助
- 帮助
- 更高
- 高度
- 钩
- 抱有希望
- 创新中心
- 但是
- HTML
- HTTPS
- i
- 主意
- 图片
- 进口
- 输入
- 改善
- 提高
- in
- 安装
- 代替
- 接口
- IT
- 它的
- JavaScript的
- 工作
- 旅程
- 知道
- 语言
- 学习
- 教训
- Level
- 自学资料库
- 生命周期
- 喜欢
- 清单
- 占地
- 制成
- 可维护的
- 使
- 制作
- 制作
- 手段
- 方法
- 方法
- 可能
- 介意
- 错误
- 现代
- 更多
- 最先进的
- 姓名
- 需求
- 全新
- 数
- 对象
- of
- on
- 一
- 优化
- 附加选项
- 其他名称
- 其它
- 包
- 参数
- 通过
- 性能
- 挑
- 柏拉图
- 柏拉图数据智能
- 柏拉图数据
- 大量
- 热门
- 可能
- 潜力
- 可能
- 强大
- 做法
- 比较喜欢
- 大概
- 市场问题
- 代码编程
- 项目
- 项目
- 财产
- 提供
- 提供
- 宁
- 达到
- 应对
- 阅读
- 建议
- 定期
- 释放
- 发布
- 相应
- 卓越
- 要求
- 必须
- 回报
- 可重复使用
- 运行
- 实现安全
- 同
- 似乎
- 集
- 设置
- Share
- 应该
- 简易
- 只是
- 自
- 网站
- 平滑
- So
- 方案,
- 一些
- 东西
- 特别是
- 花
- 开始
- 开始
- 开始
- 州/领地
- 仍
- 结构体
- 斗争
- 这样
- SUPPORT
- 支持
- Switch 开关
- 系统
- 服用
- 终端
- 这
- 他们
- 博曼
- 事
- 事
- 思想
- 通过
- 次
- 标题
- 至
- 也有
- 工具
- 工具
- 最佳
- 改造
- 转型
- true
- 教程
- 打字稿
- 理解
- 网址
- 使用
- 折扣值
- 价值观
- 版本
- 方法..
- 卷筒纸
- 的WebPack
- 井
- 什么是
- 这
- 而
- 将
- 也完全不需要
- Word
- 工作
- 世界
- 将
- 写
- 写作
- 书面
- 错误
- XML
- 年
- 您一站式解决方案
- 你自己
- 和风网