如何在Redux Selector中直接返回对象指定属性值的拼接字符串?
在Redux Selector内部直接拼接属性值的实现方法
当然可行!Redux的createSelector本身就支持在selector内部完成数据筛选+转换的完整逻辑,完全不用把字符串拼接的操作放到组件里处理。
你只需要在原selector的转换函数里,先找到目标用户,然后直接拼接所需的两个属性即可,同时记得处理找不到目标用户的边界情况,避免出现Cannot read properties of undefined的报错。
修改后的代码如下:
export const getCombinedPostCodeAndCategory = createSelector( state => state.customers.active, users => { // 先按原逻辑找到符合条件的用户 const targetCustomer = users.find(user => user.my_property === true); // 存在用户则拼接属性,不存在则返回默认值(这里用空字符串,你可以改成'N/A'之类的) return targetCustomer ? `${targetCustomer.post_code}${targetCustomer.category}` : ''; } );
关键说明:
createSelector的第二个参数(转换函数)可以返回任意类型的值,不只局限于原数据的对象结构,所以直接返回拼接后的字符串完全符合规则。- 加了三元判断是为了容错:如果
users里没有符合my_property === true的用户,targetCustomer会是undefined,这时候直接访问属性会报错,所以提前判断并返回默认值更安全。
内容的提问来源于stack exchange,提问作者Wasteland
相关产品推荐
相关产品推荐

