iis服务器助手广告广告
返回顶部
首页 > 资讯 > 前端开发 > html >在React中怎么处理数据流
  • 549
分享到

在React中怎么处理数据流

2024-04-02 19:04:59 549人浏览 独家记忆
摘要

这篇“在React中怎么处理数据流”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“在Reac

这篇“在React中怎么处理数据流”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“在React中怎么处理数据流”文章吧。

背景

相信大家在项目开发中,在页面较复杂的情况下,往往会遇到一个问题,就是在页面组件之间通信会非常困难。

比如说一个商品列表和一个已添加商品列表:

假如这两个列表是独立的两个组件,它们会共享一个数据 “被选中的商品”,在商品列表选中一个商品,会影响已添加商品列表,在已添加列表中删除一个商品,同样会影响商品列表的选中状态。

它们两个是兄弟组件,在没有数据流框架的帮助下,在组件内数据有变化的时候,只能通过父组件传输数据,往往会有 onSelectedDataChange 这种函数出现,在这种情况下,还尚且能忍受,如果组件嵌套较深的话,那痛苦可以想象一下,所以才有解决数据流的各种框架的出现。

本质分析

我们知道 React 是 mvc 里的 V,并且是数据驱动视图的,简单来说,就是数据 => 视图,视图是基于数据的渲染结果:

V = f(M)

数据有更新的时候,在进入渲染之前,会先生成 Virtual DOM,前后进行对比,有变化才进行真正的渲染。

V + ΔV = f(M + ΔM)

数据驱动视图变化有两种方式,一种是 setState,改变页面的 state,一种是触发 props 的变化。

我们知道数据是不会自己改变,那么肯定是有“外力”去推动,往往是远程请求数据回来或者是 UI 上的交互行为,我们统称这些行为叫 action:

ΔM = perfORM(action)

每一个 action 都会去改变数据,那么视图得到的数据(state)就是所有 action 叠加起来的变更,

state = actions.reduce(reducer, initState)

所以真实的场景会出现如下或更复杂的情况:

问题就出在,更新数据比较麻烦,混乱,每次要更新数据,都要一层层传递,在页面交互复杂的情况下,无法对数据进行管控。

有没有一种方式,有个集中的地方去管理数据,集中处理数据的接收,修改和分发?答案显然是有的,数据流框架就是做这个事情,熟悉 Redux 的话,就知道其实上面讲的就是 Redux 的核心理念,它和 React 的数据驱动原理是相匹配的。

数据流框架

Redux

数据流框架目前占主要地位的还是 Redux,它提供一个全局 Store 处理应用数据的接收,修改和分发。

它的原理比较简单,View 里面有任何交互行为需要改变数据,首先要发一个 action,这个 action 被 Store 接收并交给对应的 reducer 处理,处理完后把更新后的数据传递给 View。Redux 不依赖于任何框架,它只是定义一种方式控制数据的流转,可以应用于任何场景。

虽然定义了一套数据流转的方式,但真正使用上会有不少问题,我个人总结主要是两个问题:

定义过于繁琐,文件多,容易造成思维跳跃。

异步流的处理没有优雅的方案。

我们来看看写一个数据请求的例子,这是非常典型的案例:

actions.js

export const FETCH_DATA_START = 'FETCH_DATA_START';

export const FETCH_DATA_SUCCESS = 'FETCH_DATA_SUCCESS';

export const FETCH_DATA_ERROR = 'FETCH_DATA_ERROR';

export function fetchData() {

  return dispatch => {

    dispatch(fetchDataStart());

    axiOS.get('xxx').then((data) => {

      dispatch(fetchDataSuccess(data));

    }).catch((error) => {

      dispatch(fetchDataError(error));

    });

  };

}

export function fetchDataStart() {

  return {

    type: FETCH_DATA_START,

  }

}

...FETCH_DATA_SUCCESS

...FETCH_DATA_ERROR

reducer.js

import { FETCH_DATA_START, FETCH_DATA_SUCCESS, FETCH_DATA_ERROR  } from 'actions.js';

export default (state = { data: null }, action) => {

  switch (action.type) {

    case FETCH_DATA_START:

      ...

    case FETCH_DATA_SUCCESS:

      ...

    case FETCH_DATA_ERROR:

      ...

    default: 

      return state

  }

}

view.js

import { createStore, applyMiddleware } from 'redux';

import thunk from 'redux-thunk';

import reducer from 'reducer.js';

import { fetchData } from 'actions.js';

const store = createStore(reducer, applyMiddleware(thunk));

store.dispatch(fetchData());

第一个问题,发一个请求,因为需要托管请求的所有状态,所以需要定义很多的 action,这时很容易会绕晕,就算有人尝试把这些状态再封装抽象,也会充斥着一堆模板代码。有人会挑战说,虽然一开始是比较麻烦,繁琐,但对项目可维护性,扩展性都比较友好,我不太认同这样的说法,目前还算简单,真正业务逻辑复杂的情况下,会显得更恶心,效率低且阅读体验差,相信大家也写过或看过这样的代码,后面自己看回来,需要在 actions 文件搜索一下 action 的名称,reducer 文件查询一下,绕一圈才慢慢看懂。

第二个问题,按照官方推荐使用 redux-thunk 实现异步 action 的方法,只要在 action 里返回一个函数即可,这对有强迫症的人来说,简直受不了,actions 文件显得它很不纯,本来它只是来定义 action,却竟然要夹杂着数据请求,甚至 UI 上的交互。

以上就是关于“在React中怎么处理数据流”这篇文章的内容,相信大家都有了一定的了解,希望小编分享的内容对大家有帮助,若想了解更多相关的知识内容,请关注编程网html频道。

--结束END--

本文标题: 在React中怎么处理数据流

本文链接: https://www.lsjlt.com/news/94801.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 在React中怎么处理数据流
    这篇“在React中怎么处理数据流”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“在Reac...
    99+
    2024-04-02
  • 怎么在Beam中处理实时数据流
    在Beam中处理实时数据流可以通过以下几个步骤来实现: 创建一个Pipeline对象:首先,您需要创建一个Pipeline对象,...
    99+
    2024-04-02
  • Flume中怎么处理大数据流
    在Flume中处理大数据流的方法主要有以下几种: 使用多个source和sink:可以通过配置多个source和sink来处理大数...
    99+
    2024-04-02
  • React 中使用 RxJS 优化数据流的处理方案
    目录正文一般来说,处理组件中的数据流无非三种情况:下面我们看一个很简单的例子:那么,问题来了,使用数据流的方式来处理数据有什么好处呢?正文 现在我们比较熟悉的是使用 functio...
    99+
    2023-02-17
    React RxJS 优化数据流 React RxJS
  • 在Storm中如何处理数据流中的重复数据
    在Storm中处理数据流中的重复数据可以通过以下几种方式来实现: 使用缓存:在Spout或者Bolt中使用一个缓存来存储处理过的...
    99+
    2024-04-02
  • python流化数据怎么处理
    要处理Python中的流数据,可以使用以下方法之一: 使用标准输入/输出流:可以使用sys.stdin和sys.stdout来处理...
    99+
    2024-02-29
    python
  • 怎么在JavaScript中处理JSON数据
    这篇文章主要介绍“怎么在JavaScript中处理JSON数据”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“怎么在JavaScript中处理JSON数据”文章能帮助大家解决问题。一、什么是JSONJ...
    99+
    2023-07-06
  • Beam怎么处理无界数据流
    Beam是一个分布式并行数据处理框架,可以处理无界数据流。在Beam中,无界数据流通常通过读取数据源并实时处理来实现。 以下是如何处...
    99+
    2024-03-15
    Beam
  • 在Beam中怎么处理延迟数据
    在Beam中处理延迟数据通常可以通过设置窗口来处理。窗口可以根据时间、元素数量等条件对数据进行分组,然后可以对每个窗口内的数据进行操...
    99+
    2024-04-02
  • C++技术中的大数据处理:如何采用流处理技术处理大数据流?
    流处理技术用于大数据处理流处理是一种即时处理数据流的技术。在 c++++ 中,apache kafka 可用于流处理。流处理提供实时数据处理、可伸缩性和容错性。本例使用 apache k...
    99+
    2024-05-11
    大数据处理 流处理 bootstrap apache c++
  • Kafka在大数据处理和实时流处理中有什么应用场景
    Kafka 在大数据处理和实时流处理中有以下应用场景: 数据集成:Kafka 可以用作数据集成平台,将多个数据源的数据集成到一个...
    99+
    2024-03-14
    Kafka
  • 怎么在java中使用数据流
    本篇文章为大家展示了怎么在java中使用数据流,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。Java的特点有哪些Java的特点有哪些1.Java语言作为静态面向对象编程语言的代表,实现了面向对象理论...
    99+
    2023-06-14
  • 怎么在python中实现数据预处理
    这篇文章将为大家详细讲解有关怎么在python中实现数据预处理,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。python的五大特点是什么python的五大特点:1.简单易学,开发程序时,专注...
    99+
    2023-06-14
  • JavaScript React 中的数据流:理解单向数据绑定的魅力
    1. 增强可预测性 单向数据绑定强制执行数据的单一来源,这简化了数据流并减少了错误的可能性。开发人员可以清楚地跟踪数据的修改和来源,确保代码的可预测性和可维护性。 2. 避免状态争用 在双向数据绑定中,当多个组件修改同一数据时,可能会发生...
    99+
    2024-04-02
  • 怎么在React中处理错误边界组件
    这期内容当中小编将会给大家带来有关怎么在React中处理错误边界组件,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。React中的未捕获的 JS 错误会导致整个应用的崩溃,和整个组件树的卸载。从 React...
    99+
    2023-06-14
  • NoSQL怎么支持实时数据流处理
    NoSQL数据库通常通过以下几种方式来支持实时数据流处理: 支持持久化数据:NoSQL数据库通常支持大规模数据的存储和管理,能够持...
    99+
    2024-05-07
    NoSQL
  • ApacheBeam中的数据处理流程是怎样的
    Apache Beam 是一个分布式数据处理框架,它可以处理批处理和流处理任务。数据处理流程通常包括以下步骤: 创建一个 Pip...
    99+
    2024-03-06
    ApacheBeam
  • Beam中怎么实现数据的批处理和流处理混合模式
    在Beam中实现数据的批处理和流处理混合模式可以通过使用Beam的UnboundedSource和BoundedSource接口来实...
    99+
    2024-03-15
    Beam
  • React 中怎么获取数据
    今天就跟大家聊聊有关React 中怎么获取数据,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。1. 使用生命周期方法请求数据应用程序Employees...
    99+
    2024-04-02
  • React中怎么获取数据
    本篇内容介绍了“React中怎么获取数据”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!   在执行I/O...
    99+
    2024-04-02
软考高级职称资格查询
推荐阅读
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作