【发布时间】:2020-02-08 03:28:26
【问题描述】:
我正在构建一个过滤器,用户可以在其中按他们想要的类别来过滤数据,例如餐厅、酒吧、咖啡馆等。用户通过选择类别是否为真来使用过滤器false(即是否显示该特定类别),然后将其发送到我的操作和减速器。你会如何设置 reducer 来过滤数据,所以只显示真实的类别?
这是我的 filter.js 文件(商店和食物是真还是假):
onButtonPress() {
const { shop, food }
= this.state;
this.props.filterRecommendations({ shop, food });
这是我的 action.js 文件:
export const filterRecommendations = ({ shop, food}) => {
return {
type: FILTER_RECOMMENDATIONS_BY_TYPE,
payload: { shop, food }
};
};
这是我的 reducer.js 文件:
export const reducer = (state = INITIAL_STATE, action) => {
switch (action.type) {
case FILTER_RECOMMENDATIONS_BY_TYPE:
return {
...state,
myRecommendations: state.myRecommendations.filter(
item => item.type === action.payload
)
};
};
数据如下所示:
myRecommendations: [
{
id: '1',
name: 'Yes Food',
type: 'food'
},
{
id: '2',
name: 'Yes Shop',
type: 'shop'
},
]
上面的结果只是所有的数据都清除了。
【问题讨论】:
-
你不应该使用 reducer 来获取值。减速器对于更新状态很有用。而是使用选择器。
-
你能展示/链接到一个好的例子吗?我从来没有使用过选择器...
-
github.com/reduxjs/reselect。希望对您有所帮助。
-
另见 redux 的文档,它们非常适合解释 here987654322@ 的方式和原因
-
@smashed-potatoes 你为什么删除你的答案?
标签: javascript reactjs react-native object redux