你可能并不需要 Redux

炒豆儿
• 阅读 2827

你可能不需要 Redux

人们经常在他们不需要 Redux 的时候选择它。“如果我们的应用没有使用 Redux 怎么扩展?”,紧接着,开发人员对间接的Redux引入他们的代码感到不满。“为什么我必须引用三个文件才能得到一个简单的功能?” 为什么呢!

我能够理解人们责怪 Redux, React, 函数式编程,不变性和其他许多事情使他们陷入困境。将 Redux 与不需要“指定格式”代码去更新 state 的方法比较是太正常不过,可以得出结论 Redux 是复杂的。在某种程度上来说是的,但是设计如此。

Redux 提供了一个权衡,他要求你:

  • 将应用程序状态描述为普通对象和数组
  • 将系统中的变化描述为普通对象。
  • 将处理更改的逻辑描述为纯函数。

使用 React 或者不适用,这些都不是构建一个应用必要的限制。事实上这些都是很强的限制,在你的应用上使用它之前,你应该仔细考虑清楚。

你有这么做的充分理由吗?

这些限制对我很有吸引力,因为它们可以帮助构建应用程序:

如果你正在开发一个可扩展的终端,一个JavaScript调试器,或者一些网络应用程序,那就值得尝试一下,或者至少考虑一下它的一些想法(顺便说一下,它们不是新的!)

然而,如果你还在学习 React,不要选择 Redux 作为你的第一选择。

相反,学会在 React 中思考。如果你真的需要它,或者你想尝试一些新的东西,就回过头使用 React。但要谨慎对待,就像你用任何固执己见的工具一样。

如果你觉得有压力去做“Redux的方式”,这可能表明你或你的队友对此过于重视。 它只是你工具箱中的一个工具,一个疯狂的实验。

最后,不要忘记不用Redux就可以应用Redux中的思想。例如,考虑具有组件内部 state 的React组件:

import React, { Component } from 'react';

class Counter extends Component {
  state = { value: 0 };

  increment = () => {
    this.setState(prevState => ({
      value: prevState.value + 1
    }));
  };

  decrement = () => {
    this.setState(prevState => ({
      value: prevState.value - 1
    }));
  };
  
  render() {
    return (
      <div>
        {this.state.value}
        <button onClick={this.increment}>+</button>
        <button onClick={this.decrement}>-</button>
      </div>
    )
  }
}

认真重申一遍,看样子一切都很完美。

组件内部 state 没毛病

Redux提供的折衷方案是增加间接性,将“发生的事情”与“事情如何变化”分开。

这总是一件好事吗? 不,这是一个折衷方案。

例如,我们可以从我们的组件中提取一个 reducer:

import React, { Component } from 'react';

const counter = (state = { value: 0 }, action) => {
  switch (action.type) {
    case 'INCREMENT':
      return { value: state.value + 1 };
    case 'DECREMENT':
      return { value: state.value - 1 };
    default:
      return state;
  }
}

class Counter extends Component {
  state = counter(undefined, {});
  
  dispatch(action) {
    this.setState(prevState => counter(prevState, action));
  }

  increment = () => {
    this.dispatch({ type: 'INCREMENT' });
  };

  decrement = () => {
    this.dispatch({ type: 'DECREMENT' });
  };
  
  render() {
    return (
      <div>
        {this.state.value}
        <button onClick={this.increment}>+</button>
        <button onClick={this.decrement}>-</button>
      </div>
    )
  }
}

注意我们如何在不运行npm install的情况下使用Redux。 哇!

你应该对有状态的组件做这件事吗? 可能不会。 也就是说,除非你有计划从这种额外的间接中受益。 按照我们这个时代的说法,制定计划是?。

Redux库本身只是一组帮助器,用于将reducer挂载到单个全局存储对象。只要你喜欢,你可以使用尽可能少的Redux。

但是如果你付出了一些东西,请确保得到收获。

点赞
收藏
评论区
推荐文章
美凌格栋栋酱 美凌格栋栋酱
7个月前
Oracle 分组与拼接字符串同时使用
SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(
巴拉米 巴拉米
4年前
MobX 上手指南
之前用Redux比较多,一直听说Mobx能让你体验到在React里面写Vue的感觉,今天打算尝试下Mobx是不是真的有写Vue的感觉。题外话在介绍MobX的用法之前,先说点题外话,我们可以看一下MobX的中文简介。在MobX的中文网站上写着:MobX是一个经过战火洗礼的库,它通过透明的函数响应式编程
Jacquelyn38 Jacquelyn38
4年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
Easter79 Easter79
3年前
Vue 和 React 区别的一些笔记
作者:lihongxun945github.com/lihongxun945/myblog/issues/21这篇文章记录我在使用Vue和React的时候,对他们的不同之处的一些思考,不仅局限于他们本身,也会包括比如 Vuex/Redux 等经常搭配使用的工具。因为涉及到的内容很多,可能下面的每一个点都能写成一篇文章,这次先简单做
徐小夕 徐小夕
4年前
《彻底掌握redux》之开发一个任务管理平台(上)
前言redux是上手react开发的必经之路,也是目前react项目中使用的最流行状态管理库。虽然我们不使用redux也可以通过react的state和父子props进行基本的数据通信和项目开发,但是对于一个大型项目而言,往往考虑的更多的是代码结构和组件之间的通信,我们需要一种很优雅且有利于扩展的方式去开发我们的复杂系统,所以这种情况下使用redux是最佳
Stella981 Stella981
3年前
Fish Redux中的Dispatch是怎么实现的?
零.前言我们在使用fishredux构建应用的时候,界面代码(view)和事件的处理逻辑(reducer,effect)是完全解耦的,界面需要处理事件的时候将action分发给对应的事件处理逻辑去进行处理,而这个分发的过程就是下面要讲的dispatch,通过本篇的内容,你可以更深刻的理解一个action是如何一步步去进行分发的。一.从e
Stella981 Stella981
3年前
Redux异步解决方案之Redux
前段时间,我们写了一篇Redux源码分析的文章(https://www.oschina.net/action/GoToLink?urlhttps%3A%2F%2Fjuejin.im%2Fpost%2F6845166891682512909),也分析了跟React连接的库ReactRedux的源码实现(https://www.oschina
Wesley13 Wesley13
3年前
2亿用户背后的Flutter应用框架Fish Redux
背景在闲鱼深度使用Flutter开发过程中,我们遇到了业务代码耦合严重,代码可维护性糟糕,如入泥泞。对于闲鱼这样的负责业务场景,我们需要一个统一的应用框架来摆脱当下的开发困境,而这也是Flutter领域空缺的一块处女地。FishRedux是为解决上面问题上层应用框架,它是一个基于Redux数据管理的组装式fl
Stella981 Stella981
3年前
Redux入门实战——todo
1.前言在之前的博客中,我写了一篇关于todolist实现的博客,一步一步详细的记录了如何使用基础的React知识实现一个React单页面应用,通过该篇文章,能够对React入门开发有一个直观的认识和粗浅的理解。近期,个人学习了一下Redux,又将该项目使用ReactRedux的方式进行了实现。本片内容记录以下实践的过程。通过本实例,
Stella981 Stella981
3年前
Redux入门到使用。
!(https://oscimg.oschina.net/oscnet/c7b0cf8db4ed63eccfdfe3b7d711ec72da6.gif)简介Redux是针对JavaScript应用的可预测状态容器。如果熟悉设计模式之观察者模式理解起来就简单了。就是将你在其他组件中需要用到的数据放到一个容器中,那么组件就可以从其中取放
炒豆儿
炒豆儿
Lv1
能够慢慢培养的不是感情而是习惯
文章
5
粉丝
0
获赞
0