原文连接You Might Not Need Reduxreact
人们常常在须要前选择Redux。若是没有它咱们的应用程序不能扩展怎么办。后来, 开发人员对REdux介绍他们的代码的方向很困惑。为何我必须使用三个文件才能使一个简单的功能工做?为何呢?npm
人们将Redux,React,函数式编程,不变性以及许多其余东西归咎于他们的困境,我理解他们。 很天然地将Redux与不须要“样板”代码来更新状态的方法进行比较,并得出结论Redux只是复杂的。在某种程度上,它是设计的编程
Redux 提供权衡。它要求你:redux
不管有没有React,构建应用程序都不须要这些限制。事实上,这些都是很是强大的限制因素,即便在应用程序的某些部分中,在使用前你也应该仔细考虑它们。数组
这样作你有充分的理由吗?bash
这些限制对我颇有吸引力,由于它们有助于构建如下应用:服务器
若是你正在使用可扩展终端,JavaScript调试器或某些类型的Web应用程序,那么可能值得尝试一下,或者至少考虑一些它的想法(顺便说一下,它们并非 新的!)网络
可是,若是您只是学习React,请不要将Redux做为您的首选。函数式编程
而是学会在React中思考。若是您真的须要它,或者若是您想尝试新的东西,请回到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使用中获益。按照咱们这个时代的说法,制定计划是关键
Redux库自己只是一组帮助器,可将“mount”reducer“挂载”到单个全局存储对象。您能够根据须要使用尽量少的Redux。
但若是你舍弃一些东西,请确保获得相应的回报。
[完] 撒花复制代码