公司网站推广怎么做,网站自己做自己的品牌好做,福建福州罗源建设局网站,定期做图书推荐的网站React 是一个用于构建用户界面#xff08;UI#xff09;的 JavaScript 库#xff0c;用户界面由按钮、文本和图像等小单元内容构建而成。React 帮助你把它们组合成可重用、可嵌套的 组件。从 web 端网站到移动端应用#xff0c;屏幕上的所有内容都可以被分解成组件。在本章… React 是一个用于构建用户界面UI的 JavaScript 库用户界面由按钮、文本和图像等小单元内容构建而成。React 帮助你把它们组合成可重用、可嵌套的 组件。从 web 端网站到移动端应用屏幕上的所有内容都可以被分解成组件。在本章节中你将学习如何创建、定制以及有条件地显示 React 组件。
本章节
如何创建你的第一个组件在什么时候以及如何创建多文件组件如何使用 JSX 为 JavaScript 添加标签如何在 JSX 中使用花括号来从组件中使用 JavaScript 功能如何用 props 配置组件如何有条件地渲染组件如何在同一时间渲染多个组件如何通过保持组件的纯粹性来避免令人困惑的错误为什么将 UI 理解为树是有用的
你的第一个组件 React 应用是由被称为 组件 的独立 UI 片段构建而成。React 组件本质上是可以任意添加标签的 JavaScript 函数。组件可以小到一个按钮也可以大到是整个页面。这是一个 Gallery 组件用于渲染三个 Profile 组件
function Profile() {return (imgsrchttps://i.imgur.com/MK3eW3As.jpgaltKatherine Johnson/);
}export default function Gallery() {return (sectionh1Amazing scientists/h1Profile /Profile /Profile //section);
}组件的导入与导出 你可以在一个文件中声明许多组件但文件的体积过大会变得难以浏览。为了解决这个问题你可以在一个文件中只导出一个组件然后再从另一个文件中导入该组件
Gallery.js
import Profile from ./Profile.js;export default function Gallery() {return (sectionh1Amazing scientists/h1Profile /Profile /Profile //section);
}Profile.js
export default function Profile() {return (imgsrchttps://i.imgur.com/QIrZWGIs.jpgaltAlan L. Hart/);
}使用 JSX 书写标签语言 每个 React 组件都是一个 JavaScript 函数它可能包含一些标签React 会将其渲染到浏览器中。React 组件使用一种叫做 JSX 的语法扩展来表示该标签。JSX 看起来很像 HTML但它更为严格可以显示动态信息。
如果我们把现有的 HTML 标签粘贴到 React 组件中它并不一定能成功运行
export default function TodoList() {return (// This doesnt quite work!h1Hedy Lamarrs Todos/h1imgsrchttps://i.imgur.com/yXOvdOSs.jpgaltHedy LamarrclassphotoulliInvent new traffic lightsliRehearse a movie sceneliImprove spectrum technology/ul);
}如果你有像这样的现有的 HTML 片段你可以使用它进行语法转换 converter
App.js
export default function TodoList() {return (h1Hedy Lamarrs Todos/h1imgsrchttps://i.imgur.com/yXOvdOSs.jpgaltHedy LamarrclassNamephoto/ulliInvent new traffic lights/liliRehearse a movie scene/liliImprove spectrum technology/li/ul/);
}在 JSX 中通过大括号使用 JavaScript JSX 可以让你在 JavaScript 文件中编写类似 HTML 的标签语法使渲染逻辑和内容展示维护在同一个地方。有时你会想在标签中添加一点 JavaScript 逻辑或引用一个动态属性。在这种情况下你可以在 JSX 中使用花括号来为 JavaScript “开辟通道”
App.js
const person {name: Gregorio Y. Zara,theme: {backgroundColor: black,color: pink}
};export default function TodoList() {return (div style{person.theme}h1{person.name}s Todos/h1imgclassNameavatarsrchttps://i.imgur.com/7vQD0fPs.jpgaltGregorio Y. Zara/ulliImprove the videophone/liliPrepare aeronautics lectures/liliWork on the alcohol-fuelled engine/li/ul/div);
}将 Props 传递给组件 React 组件使用 props 来进行组件之间的通讯。每个父组件都可以通过为子组件提供 props 的方式来传递信息。props 可能会让你想起 HTML 属性但你可以通过它们传递任何 JavaScript 的值包括对象、数组、函数、甚至是 JSX!
App.js
import { getImageUrl } from ./utils.jsexport default function Profile() {return (CardAvatarsize{100}person{{name: Katsuko Saruhashi,imageId: YfeOqp2}}//Card);
}function Avatar({ person, size }) {return (imgclassNameavatarsrc{getImageUrl(person)}alt{person.name}width{size}height{size}/);
}function Card({ children }) {return (div classNamecard{children}/div);
} utils.js
export function getImageUrl(person, size s) {return (https://i.imgur.com/ person.imageId size .jpg);
}条件渲染 你的组件经常需要根据不同的条件来显示不同的东西。在 React 中你可以使用 JavaScript 语法如 if 语句、 和 ? : 操作符有条件地渲染 JSX。
在这个示例中JavaScript 的 操作符将会条件渲染一个复选标签
function Item({ name, isPacked }) {return (li classNameitem{name} {isPacked ✔}/li);
}export default function PackingList() {return (sectionh1Sally Rides Packing List/h1ulItemisPacked{true}nameSpace suit/ItemisPacked{true}nameHelmet with a golden leaf/ItemisPacked{false}namePhoto of Tam//ul/section);
}渲染列表 通常你需要根据数据集合来渲染多个较为类似的组件。你可以在 React 中使用 JavaScript 的 filter() 和 map() 来实现数组的过滤和转换将数据数组转换为组件数组。
对于数组的每个元素项你需要指定一个 key。通常你需要使用数据库中的 ID 作为 key。即使列表发生了变化React 也可以通过 key 来跟踪每个元素在列表中的位置。
App.js
import { people } from ./data.js;
import { getImageUrl } from ./utils.js;export default function List() {const listItems people.map(person li key{person.id}imgsrc{getImageUrl(person)}alt{person.name}/pb{person.name}:/b{ person.profession }known for {person.accomplishment}/p/li);return (articleh1Scientists/h1ul{listItems}/ul/article);
}data.js
export const people [{id: 0,name: Creola Katherine Johnson,profession: mathematician,accomplishment: spaceflight calculations,imageId: MK3eW3A
}, {id: 1,name: Mario José Molina-Pasquel Henríquez,profession: chemist,accomplishment: discovery of Arctic ozone hole,imageId: mynHUSa
}, {id: 2,name: Mohammad Abdus Salam,profession: physicist,accomplishment: electromagnetism theory,imageId: bE7W1ji
}, {id: 3,name: Percy Lavon Julian,profession: chemist,accomplishment: pioneering cortisone drugs, steroids and birth control pills,imageId: IOjWm71
}, {id: 4,name: Subrahmanyan Chandrasekhar,profession: astrophysicist,accomplishment: white dwarf star mass calculations,imageId: lrWQx8l
}];utils.js
import { people } from ./data.js;
import { getImageUrl } from ./utils.js;export default function List() {const listItems people.map(person li key{person.id}imgsrc{getImageUrl(person)}alt{person.name}/pb{person.name}:/b{ person.profession }known for {person.accomplishment}/p/li);return (articleh1Scientists/h1ul{listItems}/ul/article);
}保持组件纯粹
有些 JavaScript 函数是 纯粹 的。纯函数的基本定义
只负责自己的任务。 它不会更改在该函数调用前就已存在的对象或变量。输入相同输出也相同。 在输入相同的情况下对纯函数来说应总是返回相同的结果。
严格遵循纯函数的定义编写组件可以让代码库体量增长时避免一些令人困惑的错误和不可预测的行为。下面是一个非纯函数组件的示例
let guest 0;function Cup() {// Bad: changing a preexisting variable!guest guest 1;return h2Tea cup for guest #{guest}/h2;
}export default function TeaSet() {return (Cup /Cup /Cup //);
}你可以通过传递一个 props 来使这个组件变得纯粹而非修改已经存在的变量
function Cup({ guest }) {return h2Tea cup for guest #{guest}/h2;
}export default function TeaSet() {return (Cup guest{1} /Cup guest{2} /Cup guest{3} //);
}将 UI 视为树
React 使用树形关系建模以展示组件和模块之间的关系。
React 渲染树是组件之间父子关系的表示。 位于树顶部、靠近根组件的组件被视为顶层组件。没有子组件的组件被称为叶子组件。对组件的这种分类对于理解数据流和渲染性能非常有用。
对 JavaScript 模块之间的关系进行建模是了解应用程序的另一种有用方式。我们将其称为模块依赖树。 构建工具经常使用依赖树来捆绑客户端下载和渲染所需的所有 JavaScript 代码。对于 React 应用程序打包大小会导致用户体验退化。了解模块依赖树有助于调试此类问题。
接下来应该……
请访问 你的第一个组件 这个章节并开始阅读 希望这篇文章对你有所帮助并能在实际工作中为你提供参考。如果你有任何问题或建议欢迎在评论区留言。请记得一键三连点赞、收藏、分享哦