原文连接:You Might Not Need Reduxjavascript
人们经常在正真须要 Redux 以前,就选择使用它。“若是不使用 Redux,咱们的应用没法扩展怎么办?”应用接入 Redux 以后,开发者就开始头疼了。“为何为了开发一个简单的功能须要建立 3 个文件?”为何!html
人们痛苦地抱怨 Redux, React, FP, 不可变数据和一些别的东西,但我理解他们。那些不须要一系列代码来更新应用状态的方法天然比使用 Redux 更为简单。这说的没错,设计上也是如此。java
Redux 提供了一种权衡。它要求你:react
用简单的对象和数组来描述应用状态git
用简单对象来描述应用中的变动github
用纯函数来描述处理变动的逻辑npm
不管是否是 React 应用,这些限制都不是建立一个应用所必须的。事实上,这些都是很是强的约束,在把它们加入应用以前,你应当慎重考虑。redux
你有没有一些好的理由来使用 Redux?数组
固然是有的。这些限制吸引我是由于它同时也可以使应用拥有如下的特性:服务器
当 UI 变动时,能够重用大部分业务逻辑。(视频预警)
若是,你正在开发一个可扩展的终端、JavaScript 调试器,或是某些类型的应用,那么,Redux 也许值得一试。至少,它是值得考虑的。(顺便说一句,Elm 和 Om 并非新技术。)
然而,若是你只是学习 React,那么,Redux 并非你的首选。
与之相反,你该看看理解 React。当你有真正的须要或想玩一些新东西的时候,才去尝试 Redux。然而,就像你使用其余强限制的工具同样,谨慎地选择是否使用它。
若是,你以为用 Redux 的方式编码有压力,那可能意味着你或你的伙伴对此太较真了。Redux 只是你工具箱中的一件工具,一种尝试。
最后,记住你能够将 Redux 的理念运用到你的应用中,但不使用 Redux。试想一下,一个拥有本地状态的 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 库它自己只是一系列的助手将 reducers “挂载”到全局惟一的 store 对象上。你能够根据你的喜爱来选择是尽量少,或尽量多得使用 Redux。
可是,若是你付出了一些,确保你同时也能得到一些回报。
译者注:若是你对本文感兴趣,你或许也会对这篇文章感兴趣。