您当前的位置:首页 > 电脑百科 > 程序开发 > 语言 > javascript

结合使用React和其他技术的七种方法

时间:2023-06-08 12:21:36  来源:51CTO  作者:

译者 | 布加迪

审校 | 重楼

React是一种知名的JAVAScript库,可以用它来为用途广泛的Web应用程序开发UI。React有很强的适应性,可以将它与其他技术结合起来,构建更强大、更有效的应用程序。

不妨了解如何将React与各种技术结合起来,以便集诸多优点于一体。

1. React + Redux

Redux是一个与React结合使用的状态管理库。Redux便于集中式应用程序状态管理。当构建有许多状态的复杂应用程序时,React和Redux可以很好地协同工作。

下面这个示例说明了如何结合使用React和Redux:

import React from 'react';
import { createStore } from 'redux';
import { Provider } from 'react-redux';
const initialState = { count: 0 };

function reducer(state = initialState, action) {
 switch (action.type) {
 case 'INCREMENT':
 return { count: state.count + 1 };
 case 'DECREMENT':
 return { count: state.count - 1 };
default:
 return state;
}
}

const import React from 'react';
import { useQuery, gql } from '@apollo/client';

const GET_USERS = gql`
query GetUsers {
users {
id
name
}
}
;
function Users() {
const { loading, error, data } = useQuery(GET_USERS);
if (loading) return <p>Loading...</p>;
if (error) return <p>Error :(</p>;
return (
store = createStore(reducer);
function Counter() {
const count = useSelector(state => state.count);
const dispatch = useDispatch();
return (
<div>
<p>Count: {count}</p>
<button onClick={() => dispatch({ type: 'INCREMENT' })}>+</button>
<button onClick={() => dispatch({ type: 'DECREMENT' })}>-</button>
</div>
);
}
function App() {
return (
<Provider store={store}>
<Counter />
</Provider>
);
}
export default App;

该示例创建了一个初始状态为0的Redux存储。然后,reducer函数处理INCREMENT操作和DECREMENT操作。代码使用useSelector和useDispatch钩子来获取进行中的计数,并单独分派活动。

最后,为了使整个应用程序可以访问该存储,将计数器组件包装在提供者组件中。

2.结合Next.js用于服务器端渲染

Next.js是一个开发框架,通过向客户端传输html和使用React组件的服务器端渲染,以优化网站速度和搜索引擎优化(seo)策略。

其强大的工具集可以与React协同工作,提供出色的性能和高搜索引擎排名。

// pages/index.js
import React from 'react';
function Home() {
 return (
 <div>
 <h1>Hello, World!</h1>
 <p>This is a server-rendered React component.</p>
 </div>
 );
}
export default Home;

在该示例中,您描述了一个名为Home的React组件。Next.js在服务器上渲染时,会生成一个含有该组件内容的静态HTML页面。当页面收到来自客户端的访问时,它会将HTML发送到客户端并hydrate组件,使其能够作为动态React组件来运行。

3.结合GraphQL以获取数据

GraphQL是一种API查询语言,它提供一种熟练、强大且适应性强的REST替代方案。借助GraphQL,您可以更快地获取数据,更快地更新用户界面。

这个示例说明了结合使用React和GraphQL的方法:

import React from 'react';
import { useQuery, gql } from '@apollo/client';
const GET_USERS = gql`
query GetUsers {
users {
id
name
}
}
;
function Users() {
const { loading, error, data } = useQuery(GET_USERS);
if (loading) return <p>Loading...</p>;
if (error) return <p>Error :(</p>;
return (
<ul>
{data.users.map(user => (
<li key={user.id}>{user.name}</li>
))}
</ul>
);
}
function App() {
return (
<div>
<h1>Users</h1>
<Users />
</div>
);
}
export default App;

该示例从@apollo/client库调用useQuery函数,以便从GraphQL编程接口获取客户端的概要。用户列表随后显示在UI中。

4.结合css-in-JS用于样式

CSS-in-JS是一种基于JavaScript的React组件样式化方法。它简化了管理复杂样式表的工作,并允许您以模块化和基于组件的方式编写样式。

下面这个示例说明了如何结合使用React和CSS-in-JS:

import React from 'react';
import styled from 'styled-components';
const Button = styled.button`
 background-color: #007bff;
 color: #fff;
 padding: 10px 20px;
 border-radius: 5px;
 font-size: 16px;
 cursor: pointer;
 &:hover {
 background-color: #0069d9;
 }
;
function App() {
 return (
 <div>
 <Button>Click me!</Button>
 </div>
 );
}
export default App;

这个例子使用styled函数创建了样式按钮组件。它定义了按钮的体验色调、文本色调、缓冲、线扫描、文本尺寸和光标。

还定义了当用户将鼠标悬停在按钮上时改变背景颜色的悬停状态。最后使用React组件渲染按钮。

5. 结合D3用于数据可视化

D3是一个数据操作和可视化JavaScript库。您可以使用React实现强大的交互式数据可视化。下面这个示例说明了如何结合使用React和D3:

import React, { useRef, useEffect } from 'react';
import * as d3 from 'd3';
function BarChart({ data }) {
 const ref = useRef();
 useEffect(() => {
 const svg = d3.select(ref.current);
 const width = svg.attr('width');
 const height = svg.attr('height');
 const x = d3.scaleBand()
 .domAIn(data.map((d) => d.label))
 .range([0, width])
 .padding(0.5);
 const y = d3.scaleLinear()
 .domain([0, d3.max(data, (d) => d.value)])
 .range([height, 0]);
 svg.selectAll('rect')
 .data(data)
 .enter()
 .append('rect')
 .attr('x', (d) => x(d.label))
 .attr('y', (d) => y(d.value))
 .attr('width', x.bandwidth())
 .attr('height', (d) => height - y(d.value))
 .attr('fill', '#007bff');
 }, [data]);
 return (
 <svg ref={ref} width={400} height={400}>
 {/* axes go here */}
 </svg>
 );
}
export default BarChart;

这段代码定义了BarChart组件,该组件接受前面代码片段中的数据道具。它调用useRef钩子来引用SVG组件,该组件将使用它来绘制轮廓。

之后,它渲染图表的条形,并使用useEffect()钩子定义刻度,该钩子将数据的值映射到屏幕坐标。

6. 结合WebSockets以添加实时功能

实现WebSockets建立了一个完全可操作的双向通道,使客户端和服务器之间能够持续联系。它们使React能够为Web应用程序持续添加实用的组件,比如讨论板、实时更新和警告。

可以通过如下方式结合使用React和WebSockets:

import React, { useState, useEffect } from 'react';
import io from 'socket.io-client';
function ChatRoom() {
 const [messages, setMessages] = useState([]);
 const [inputValue, setInputValue] = useState('');
 const socket = io('http://localhost:3001');
 useEffect(() => {
 socket.on('message', (message) => {
 setMessages([...messages, message]);
 });
 }, [messages, socket]);
 const handleSubmit = (e) => {
 e.preventDefault();
 socket.emit('message', inputValue);
 setInputValue('');
 };
 return (
 <div>
 <ul>
 {messages.map((message, i) => (
 <li key={i}>{message}</li>
 ))}
 </ul>
 <form onSubmit={handleSubmit}>
 <input
 type="text"
 value={inputValue}
 onChange={(e) => setInputValue(e.target.value)}
 />
 <button type="submit">Send</button>
 </form>
 </div>
 );
}
export default ChatRoom;

在该示例中,您定义了使用socket.io-client库的ChatRoom组件,以连接到WebSocket服务器。您可以使用useState钩子来处理消息概要。

一收到新消息,useEffect钩子注册侦听器,以触发对消息列表进行消息事件更新的操作。若要清除和发送事件消息的输入值,用户可以使用handlessubmit函数。

随后,带有输入字段和按钮的表单以及更新后的消息列表都将显示在屏幕上。

至于每个表单提交,调用handlessubmit函数是不可避免的。为了将消息传递到服务器,该方法使用套接字。

7. 结合React Native用于移动开发

React Local是一个使用React构建本地通用应用程序的系统,可用于推广面向IOSAndroid平台的可移植应用程序。

结合使用React Native和React,您可以在移动和Web平台上使用React的基于组件的设计和可重用代码。这缩短了手机应用程序的开发周期和上市时间。React Native是一种流行的框架,用于开发可充分利用React库的原生移动应用程序。

引入重要的编程框架和库对分开处理iOS和安卓的设计师而言至关重要,比如Node.js、Response Local CLI、Xcode或Android Studio等编程框架和库。最后,简单的React Native组件使开发人员能够为iOS和安卓平台创建稳健可靠且功能丰富的移动应用程序。

将React与其他技术结合起来

React是一种大受欢迎的高效库,用于构建在线应用程序。React是创建用户界面的上佳选择,但它也可以与其他技术结合起来以增强功能。

通过结合React与上述技术,开发人员就能构建更精巧、更先进的应用程序,从而提供更出色的用户体验。React及其众多工具和库组成的生态系统可以满足为构建基础网站或复杂的Web应用程序各方面的需要。

原文标题:Beyond React: 7 Ways of Integrating React With Other Technologies,作者:Robert Pearce



Tags:React   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,不构成投资建议。投资者据此操作,风险自担。如有任何标注错误或版权侵犯请与我们联系,我们将及时更正、删除。
▌相关推荐
从0实现React18
要从零开始实现React 18,需要理解React的核心概念和一些主要特性。以下是一个简要的步骤:1. 了解React的基本概念: 组件: React应用的基本构建块。组件可以是函数组件(Functional...【详细内容】
2024-01-22  Search: React  点击:(47)  评论:(0)  加入收藏
React的核心概念
React是一个开源JavaScript库,用于构建用户界面。它由Facebook开发并维护,已成为构建Web和移动应用程序的流行选择。React的主要特点是组件化架构,它使开发人员能够将应用程序...【详细内容】
2024-01-09  Search: React  点击:(103)  评论:(0)  加入收藏
浅析五种 React 组件设计模式
作为一名 React 开发者,你可能会面临下面几个问题: 如何构建一个高复用度性的组件,使其适应不同的业务场景? 如何构建一个具有简单 API的组件,使其易于使用? 如何构建一个在 UI 和...【详细内容】
2024-01-09  Search: React  点击:(83)  评论:(0)  加入收藏
React与Vue性能对比:两大前端框架的性能
React和Vue是当今最流行的两个前端框架,它们在性能方面都有着出色的表现。React的加载速度:初次加载:由于React使用了虚拟DOM(Virtual DOM)技术,它可以通过比较虚拟DOM树与实际DOM...【详细内容】
2024-01-05  Search: React  点击:(107)  评论:(0)  加入收藏
Vanilla Design,新一代 React UI 库
这几天做需求,一堆 UI 库实在是不知道选哪个,各种角色的同事争论不休;还总有新轮子冒出来,所以我来插一脚,并借此来领悟写代码的哲学:The best way to write secure and reliable...【详细内容】
2024-01-04  Search: React  点击:(89)  评论:(0)  加入收藏
vue3中 ref和 reactive的区别 ?
最近有朋友在面试过程中经常被问到这么一个问题,vue3 中的ref 和 reactive的区别在哪里,为什么 要定义两个API 一个 api不能实现 响应式更新吗??带着这个疑问 ,我们 接下来进行逐...【详细内容】
2024-01-03  Search: React  点击:(38)  评论:(0)  加入收藏
React18 与 Vue3 全方面对比
1. 编程风格 & 视图风格1.1 编程风格 React 语法少、难度大;Vue 语法多,难度小例如指令:Vue<input v-model="username"/><ul> <li v-for="(item,index) in list" :key="inde...【详细内容】
2024-01-03  Search: React  点击:(72)  评论:(0)  加入收藏
使用React微前端的完整指南
译者 | 李睿审校 | 重楼事实表明,前端开发伴随着许多挑战。而寻找简化开发过程和加快任务执行的方法是每个开发团队的目标。在开发大型复杂产品时,让开发团队成员在任务上进行...【详细内容】
2023-12-26  Search: React  点击:(90)  评论:(0)  加入收藏
什么是React的错误边界(Error Boundary)?
React的错误边界(ErrorBoundary)是一种React组件,用于捕获并处理其子组件树中任何位置的JavaScript错误。它允许开发人员在应用程序中定义错误边界,以便在发生错误时显示备用UI...【详细内容】
2023-12-21  Search: React  点击:(125)  评论:(0)  加入收藏
如何设计更优雅的 React 组件?
在日常开发中,团队中每个人组织代码的方式不尽相同。下面我们就从代码结构的角度来看看如何组织一个更加优雅的 React 组件!1. 导入依赖项我们通常会在组件文件顶部导入组件所...【详细内容】
2023-12-21  Search: React  点击:(101)  评论:(0)  加入收藏
▌简易百科推荐
17 个你需要知道的 JavaScript 优化技巧
你可能一直在使用JavaScript搞开发,但很多时候你可能对它提供的最新功能并不感冒,尽管这些功能在无需编写额外代码的情况下就可以解决你的问题。作为前端开发人员,我们必须了解...【详细内容】
2024-04-03  前端新世界  微信公众号  Tags:JavaScript   点击:(5)  评论:(0)  加入收藏
你不可不知的 15 个 JavaScript 小贴士
在掌握如何编写JavaScript代码之后,那么就进阶到实践&mdash;&mdash;如何真正地解决问题。我们需要更改JS代码使其更简单、更易于阅读,因为这样的程序更易于团队成员之间紧密协...【详细内容】
2024-03-21  前端新世界  微信公众号  Tags:JavaScript   点击:(27)  评论:(0)  加入收藏
又出新JS运行时了!JS运行时大盘点
Node.js是基于Google V8引擎的JavaScript运行时,以非阻塞I/O和事件驱动架构为特色,实现全栈开发。它跨平台且拥有丰富的生态系统,但也面临安全性、TypeScript支持和性能等挑战...【详细内容】
2024-03-21  前端充电宝  微信公众号  Tags:JS   点击:(25)  评论:(0)  加入收藏
构建一个通用灵活的JavaScript插件系统?看完你也会!
在软件开发中,插件系统为应用程序提供了巨大的灵活性和可扩展性。它们允许开发者在不修改核心代码的情况下扩展和定制应用程序的功能。本文将详细介绍如何构建一个灵活的Java...【详细内容】
2024-03-20  前端历险记  微信公众号  Tags:JavaScript   点击:(20)  评论:(0)  加入收藏
对JavaScript代码压缩有什么好处?
对JavaScript代码进行压缩主要带来以下好处: 减小文件大小:通过移除代码中的空白符、换行符、注释,以及缩短变量名等方式,可以显著减小JavaScript文件的大小。这有助于减少网页...【详细内容】
2024-03-13  WangLiwen    Tags:JavaScript   点击:(2)  评论:(0)  加入收藏
跨端轻量JavaScript引擎的实现与探索
一、JavaScript 1.JavaScript语言JavaScript是ECMAScript的实现,由ECMA 39(欧洲计算机制造商协会39号技术委员会)负责制定ECMAScript标准。ECMAScript发展史: 2.JavaScript...【详细内容】
2024-03-12  京东云开发者    Tags:JavaScript   点击:(2)  评论:(0)  加入收藏
面向AI工程的五大JavaScript工具
令许多人惊讶的是,一向在Web开发领域中大放异彩的JavaScript在开发使用大语言模型(LLM)的应用程序方面同样大有价值。我们在本文中将介绍面向AI工程的五大工具,并为希望将LLM...【详细内容】
2024-02-06    51CTO  Tags:JavaScript   点击:(53)  评论:(0)  加入收藏
JS小知识,使用这6个小技巧,避免过多的使用 if 语句
最近在重构我的代码时,我注意到早期的代码使用了太多的 if 语句,达到了我以前从未见过的程度。这就是为什么我认为分享这些可以帮助我们避免使用过多 if 语句的简单技巧很重要...【详细内容】
2024-01-30  前端达人  今日头条  Tags:JS   点击:(56)  评论:(0)  加入收藏
18个JavaScript技巧:编写简洁高效的代码
本文翻译自 18 JavaScript Tips : You Should Know for Clean and Efficient Code,作者:Shefali, 略有删改。在这篇文章中,我将分享18个JavaScript技巧,以及一些你应该知道的示例...【详细内容】
2024-01-30  南城大前端  微信公众号  Tags:JavaScript   点击:(68)  评论:(0)  加入收藏
使用 JavaScript 清理我的 200GB iCloud,有了一个意外发现!
本文作者在综合成本因素之下,决定用 Java 脚本来清理一下自己的 iCloud,结果却有了一个意外发现,即在 iCloud 中上传同一个视频和删除此视频之后,iCloud 的空间并不一致,这到底是...【详细内容】
2024-01-11    CSDN  Tags:JavaScript   点击:(99)  评论:(0)  加入收藏
站内最新
站内热门
站内头条