【React技术】JSX在企业级项目的运用and一个元素渲染demo

简介: 【React技术】JSX在企业级项目的运用and一个元素渲染demo

JSX

它被称为JSX,是JavaScript的语法扩展。我们建议在React中使用JSX。JSX可以很好地描述UI应该呈现它应该具有的基本交互形式。JSX可能会让人想起模板语言,但它具有JavaScript的所有功能。

const element = <h1>Hello, world!</h1>;

在这里插入图片描述

React认为渲染逻辑与其他UI逻辑本质上是耦合的。例如,您需要在UI中绑定和处理事件,在某个时间状态发生变化时通知UI,并在UI中显示准备好的数据。

const name = 'Josh Perez';
const element = <h1>Hello, {name}</h1>;

ReactDOM.render(
  element,
  document.getElementById('root')
);

在 JSX 语法中,你可以在React不会人为地将标记和逻辑分离到不同的文件中,而是将它们存储在一个称为“组件”的松散耦合单元中,以实现关注点的分离。

function formatName(user) {
  return user.firstName + ' ' + user.lastName;
}

const user = {
  firstName: 'Harper',
  lastName: 'Perez'
};

const element = (
  <h1>
    Hello, {formatName(user)}!
  </h1>
);

ReactDOM.render(
  element,
  document.getElementById('root')
);

编译后,JSX表达式将被转换为一个普通的JavaScript函数调用,并在获取其值后获得JavaScript对象。
换言之,可以在if语句和for循环的代码块中使用JSX,将JSX分配给变量,作为参数传入JSX,并从函数返回JSX:

function getGreeting(user) {
  if (user) {
    return <h1>Hello, {formatName(user)}!</h1>;
  }
  return <h1>Hello, Stranger.</h1>;
}

注意:
因为JSX语法比HTML更接近JavaScript,所以React DOM使用camelCase(小驼峰命名)来定义属性的名称,而不是使用HTML属性名称的命名约定。
例如,JSX中的类变为className,tabindex变为tabindex。

React

ProductTable的标头(包含“Name”和“Price”的部分)不是一个单独的组件。这只是一个偏好选择,如何处理这个问题一直存在争议。
就本例而言,由于标头仅起到呈现数据集合的作用,这与ProductTable一致,因此我们仍将其保留为ProductTable的一部分。
但是,如果标头太复杂(例如,我们需要为其添加排序函数),则有必要将其用作独立的ProductTableHeader组件。
在这里插入图片描述
实际上,由于经常向用户展示JSON数据模型,如果模型设计得当,UI(或组件结构)将逐一对应于数据模型。
这是因为UI和数据模型都倾向于遵循相同的信息结构。
将UI分成组件,其中每个组件都需要匹配数据模型的一部分。

[
  {category: "Sporting Goods", price: "$49.99", stocked: true, name: "Football"},
  {category: "Sporting Goods", price: "$9.99", stocked: true, name: "Baseball"},
  {category: "Sporting Goods", price: "$29.99", stocked: false, name: "Basketball"},
  {category: "Electronics", price: "$99.99", stocked: true, name: "iPod Touch"},
  {category: "Electronics", price: "$399.99", stocked: false, name: "iPhone 5"},
  {category: "Electronics", price: "$199.99", stocked: true, name: "Nexus 7"}
];

FilterableProductTable(橙色):整个示例应用程序
搜索栏(蓝色):接受所有用户输入
ProductTable(绿色):根据用户输入显示数据内容和过滤结果
ProductCategoryRow(天蓝色):显示每个产品类别的标题
ProductRow(红色):每行显示一个产品

Toolbar 组件接受一个额外的“theme”属性,然后传递给 ThemedButton 组件。如果应用中每一个单独的按钮都需要知道 theme 的值,这会是件很麻烦的事,

class App extends React.Component {
  render() {
    return <Toolbar theme="dark" />;
  }
}

function Toolbar(props) {
  return (
    <div>
      <ThemedButton theme={props.theme} />
    </div>
  );
}

class ThemedButton extends React.Component {
  render() {
    return <Button theme={this.props.theme} />;
  }
}

因为必须将这个值层层传递所有组件。

主要应用场景是不同级别的许多组件需要访问相同的数据。请谨慎使用,因为这会使组件的可重用性更差。
如果最终只有Avatar组件真正需要用户和avatarSize,那么层层传递这两个道具是非常多余的。一旦组件需要更多顶级组件的道具,你就必须在中间一个一个地添加它们,这将变得非常麻烦。

元素渲染demo

<div id="root"></div>

我们称其为“根”DOM节点,因为该节点中的所有内容都将由React DOM管理。
使用React构建的应用程序通常只有一个根DOM节点。如果要将React集成到现有应用程序中,可以在应用程序中包含任意数量的独立根DOM节点。

const element = <h1>Hello, world</h1>;
ReactDOM.render(element, document.getElementById('root'));

要将React元素渲染到根DOM节点,只需将它们传递到ReactDOM。render():
在实践中,大多数 React 应用只会调用一次 ReactDOM.render()。
在这里插入图片描述
当提供程序的值更改时,将重新呈现其所有内部消耗组件。提供程序及其内部使用者组件不受shouldComponentUpdate函数的约束,因此使用者组件也可以在其祖先组件退出更新时进行更新。

相关文章
|
1月前
|
XML JavaScript 前端开发
React Jsx语法入门
【8月更文挑战第13天】React Jsx语法入门
32 4
|
1月前
|
资源调度 前端开发 API
React Suspense与Concurrent Mode:异步渲染的未来
React的Suspense与Concurrent Mode是16.8版后引入的功能,旨在改善用户体验与性能。Suspense组件作为异步边界,允许子组件在数据加载完成前显示占位符,结合React.lazy实现懒加载,优化资源调度。Concurrent Mode则通过并发渲染与智能调度提升应用响应性,支持时间分片和优先级调度,确保即使处理复杂任务时UI仍流畅。二者结合使用,能显著提高应用效率与交互体验,尤其适用于数据驱动的应用场景。
57 20
|
1月前
|
前端开发
React 如何使用条件渲染
【8月更文挑战第17天】React 如何使用条件渲染
30 3
|
1月前
|
前端开发 JavaScript
React Server Component 使用问题之添加jsx的组件化能力,如何操作
React Server Component 使用问题之添加jsx的组件化能力,如何操作
|
1月前
|
移动开发 前端开发 JavaScript
使用React Native进行跨平台移动开发:技术探索与实践
【8月更文挑战第10天】React Native以其跨平台、高性能、易学习等优势,在移动开发领域取得了显著的成果。通过合理使用React Native,开发者可以更加高效地开发出高质量、低成本的移动应用。然而,在享受React Native带来的便利的同时,我们也需要关注其潜在的挑战和限制,并通过不断学习和实践来提升我们的开发能力。
|
19天前
|
前端开发 Java Spring
Spring与Angular/React/Vue:当后端大佬遇上前端三杰,会擦出怎样的火花?一场技术的盛宴,你准备好了吗?
【8月更文挑战第31天】Spring框架与Angular、React、Vue等前端框架的集成是现代Web应用开发的核心。通过RESTful API、WebSocket及GraphQL等方式,Spring能与前端框架高效互动,提供快速且功能丰富的应用。RESTful API简单有效,适用于基本数据交互;WebSocket支持实时通信,适合聊天应用和数据监控;GraphQL则提供更精确的数据查询能力。开发者可根据需求选择合适的集成方式,提升用户体验和应用功能。
52 0
|
19天前
|
Java 前端开发 Spring
技术融合新潮流!Vaadin携手Spring Boot、React、Angular,引领Web开发变革,你准备好了吗?
【8月更文挑战第31天】本文探讨了Vaadin与Spring Boot、React及Angular等主流技术栈的最佳融合实践。Vaadin作为现代Java Web框架,与其他技术栈结合能更好地满足复杂应用需求。文中通过示例代码展示了如何在Spring Boot项目中集成Vaadin,以及如何在Vaadin项目中使用React和Angular组件,充分发挥各技术栈的优势,提升开发效率和用户体验。开发者可根据具体需求选择合适的技术组合。
28 0
|
19天前
|
缓存 前端开发 JavaScript
React.memo 与 useMemo 超厉害!深入浅出带你理解记忆化技术,让 React 性能优化更上一层楼!
【8月更文挑战第31天】在React开发中,性能优化至关重要。本文探讨了`React.memo`和`useMemo`两大利器,前者通过避免不必要的组件重渲染提升效率,后者则缓存计算结果,防止重复计算。结合示例代码,文章详细解析了如何运用这两个Hook进行性能优化,并强调了合理选择与谨慎使用的最佳实践,助你轻松掌握高效开发技巧。
35 0
|
19天前
|
前端开发 UED 开发者
React.lazy()与Suspense:实现按需加载的动态组件——深入理解代码分割、提升首屏速度和优化用户体验的关键技术
【8月更文挑战第31天】在现代Web应用中,性能优化至关重要,特别是减少首屏加载时间和提升用户交互体验。React.lazy()和Suspense组件提供了一种优雅的解决方案,允许按需加载组件,仅在需要渲染时加载相应代码块,从而加快页面展示速度。Suspense组件在组件加载期间显示备选内容,确保了平滑的加载过渡。
30 0
|
19天前
|
前端开发 JavaScript
React 组件和 React 元素有什么区别?
【8月更文挑战第31天】
22 0

热门文章

最新文章