我目前正在写一MERN堆栈应用程序,我似乎处理状态以及我欣赏使用模块化概念背后反应。何时使用Redux?
我看到终极版获得非常流行,但是从我的基本的了解,似乎把所有的状态,并将它们存储在一个单店。
目前我储存的一个道具叫isMobile
简单地声明无论我是在移动状态还是不行。我目前正在根据需要将其传递给每个组件,以进行相应的调整。 Redux有助于解决这种情况吗?如果没有,使用React的真正好处是什么。
我目前正在写一MERN堆栈应用程序,我似乎处理状态以及我欣赏使用模块化概念背后反应。何时使用Redux?
我看到终极版获得非常流行,但是从我的基本的了解,似乎把所有的状态,并将它们存储在一个单店。
目前我储存的一个道具叫isMobile
简单地声明无论我是在移动状态还是不行。我目前正在根据需要将其传递给每个组件,以进行相应的调整。 Redux有助于解决这种情况吗?如果没有,使用React的真正好处是什么。
我有时会发现有一个window
减速器可以跟踪屏幕大小,滚动高度以及其他一些组件依赖的其他属性。我会创建一个动作创建器,将其设置在顶层组件,以便任何调整大小或滚动动作都可以更新redux存储,这样,我就不需要在依赖于窗口属性的每个组件上附加这些处理程序。
注意,这有可能会重性能,明智的,所以使用反跳和/或节流功能,以减少时间的动作是发射了量是必不可少的。
所以无论是对你的应用程序或在您最上面的成分包装部件,你可以做这样的事情:
import { throttle, debounce } from 'lodash';
...
...
constructor(props){
super(props);
this.scrollHandler = this.scrollHandler.bind(this);
this.resizeHandler = this.resizeHandler.bind(this);
this.update = this.update.bind(this);
}
scrollHandler() {
throttle(this.update, 250)();
}
resizeHandler() {
debounce(this.update, 500)();
}
update() {
const { updateWindow } = this.props;
const {
innerHeight,
innerWidth,
outerHeight,
outerWidth,
pageYOffset,
scrollY
} = window;
updateWindow({
innerHeight,
innerWidth,
outerHeight,
outerWidth,
pageYOffset,
scrollY
});
}
componentDidMount() {
this.update();
window.addEventListener('scroll', this.scrollHandler, false);
window.addEventListener('resize', this.resizeHandler, false);
}
componentWillUnmount() {
window.removeEventListener('scroll', this.scrollHandler, false);
window.removeEventListener('resize', this.resizeHandler, false);
}
和减速器可能是这个样子:
const DEFAULT_WINDOW = {
innerWidth: 0,
innerHeight: 0,
outerWidth: 0,
outerHeight: 0,
pageYOffset: 0,
scrollY: 0,
scrollingUp: false,
scrollingDown: false
};
const window = (
state = DEFAULT_WINDOW,
action
) => {
const { data } = action;
switch (action.type) {
case types.UPDATE_WINDOW:
return assign({}, state, data, {
scrollingUp: data.pageYOffset < state.pageYOffset,
scrollingDown: data.pageYOffset > state.pageYOffset
});
default: return state;
}
};
完美谢谢你的例子和解释。 – Sequential
的终极版常见问题解答,在此http://redux.js.org/docs/faq/General.html#general-when-to-use具体问题:
一般情况下,使用终极版w ^如果你有合理数量的数据随着时间的推移而变化,那么你需要一个单一的事实来源,并且你发现像将所有事物保持在顶层React组件的状态这样的方法已经不够了。
我最近还合着了一篇讨论the benefits of using Redux in a React application的文章。总结在于,将应用程序状态保持在组件树之外可以使数据流更简单,尤其是在您描述的情况下。
感谢您的阅读和链接。非常感激。 – Sequential
当使用Redux的阵营,你会发现,有两种类型的状态:全球性的,这是不可改变的,并通过行动和其处理的常用方法本地状态改变。
学习终极版中反应的好方法是要经过丹Abramow的入门终极版:
https://egghead.io/courses/getting-started-with-redux
你会发现,在本教程的阵营代码有没有生命周期挂钩,每个组件只呈现HTML。所有州都是全球性的,并通过行动而改变
然而,在使用终极版一个更大的应用程序通常会有局部和全局的状态,他们将不得不互相交流。这增加了您的应用程序的复杂性。
请参阅 https://medium.com/@dan_abramov/you-might-not-need-redux-be46360cf367
它听起来并不像'isMobile'永远不会改变,所以它不是你真正需要一个状态管理器的东西。 –
我第一次头“MERN”,我喜欢它。 :) – Aaron
@Jordan,好吧,例如,某些平板电脑会根据横向和纵向显示不同的视图。因此,如果我传递状态:所有组件都可以对状态更改做出反应。 – Sequential