我正在使用React + Redux来构建一个与应用编程接口对话的webapp,类似于https://github.com/reactjs/redux/tree/master/examples/real-world中的示例。
我的API返回艺术家、专辑和曲目列表,并允许查询它们的列表或单个艺术家、专辑或曲目的列表。(可以把它想象成/albums、/artists和/tracks,再加上//albums/:id、/artist/:id和/tracks/:id)。
我实现了一个API中间件,并使用了上面示例中的paginate
reducer来获得一个存储,其中包含用于专辑、艺术家和歌曲检索的分页键。
现在,我想实现单数调用来获取单个对象并显示它。但我不确定正确的方式来处理我的减速器。我应该只使用额外的reducers artist
,album
和track
来管理和存储这些项目吗?
另一个与reducers管理相关的问题是,使用我目前的设置,我存储了3个paginate
reducers,每个包含30个项目。也就是说,我的商店里几乎有100件商品,而同时展示的商品最多有30件,效率似乎不是很高。我做得对吗?
我寻找了真实世界的开源示例,背后有一个相当大的API,但没有遇到比上面的真实示例更详细的示例:/
谢谢!
发布于 2016-08-29 15:44:35
我已经开始按域对象类型来划分状态--比如艺术家的专辑和曲目(以及一些用户界面状态,比如"overlay“、"error messages”等等)。然后,我让一些重新选择的类接受当前状态,并将其处理成我的React组件可以使用的东西。
这给了我一个简单的数据存储(可以用你最喜欢的单元测试框架测试),独立于数据转换(可以独立测试)。
reselect的好处是它提供了一个很好的数据转换管道,并缓存了结果-这样您就不需要总是重新计算数据转换。这意味着当React组件不需要重新渲染时,它们可以更好地处理。
哦,在效率方面,存储大量来自服务器的缓存数据。我的策略是积极地缓存-这样我就不会从缓存中清除内容。但是,我有一个单独的对象,称为“控制器”,它监视redux模型,并根据状态变化触发事件(如预加载数据)。如果缓存失效代码成为性能问题,我会把它放在这里。或者你可以让reducer来做缓存失效。
发布于 2016-07-21 01:13:15
显然,在React中没有一条规则适用于所有人。
然而,我在GitHub上的大多数样板和react web应用程序中注意到的是,通常会为每个容器创建一个reducer。
所以,是的,为你的艺术家、专辑和曲目创建reducers将是一个很好的实践,然后你可以使用combineReducer将它们组合到一个rootReducer中;下面是一个例子。
import { combineReducers } from 'redux';
import artists from './artistsReducer';
import albums from './albumsReducer';
import tracks from './tracksReducer';
const rootReducer = combineReducers({
artists,
albums,
tracks
});
export default rootReducer;
同样,这个信息来自于自己的经验和使用react - redux观看repos,如果我错了,请纠正我。
诚挚的问候,
https://stackoverflow.com/questions/38483900
复制相似问题