1

我正在尝试使用重新选择选择器作为另一个选择器的参数:

import { createSelector } from 'reselect'


const productsSelector = state => {
  return state.get('searchResults').get('products')
}

export const getSelectedProduct = createSelector(
  productsSelector,
  (products) => {
    const selected = products.filter(product => product.shop.selected)
    return selected[0]
  }
)

export const getSelectedProductProduct = createSelector(
  getSelectedProduct,
  prod => {
    const x = prod ? prod.products ? prod.products.find(produc => produc.selected) : getSelectedProduct : {}
    if(prod) {
      console.log(prod)
      if ('prod', prod.products) {
        console.log(prod.products)
        if (prod.products.find(produ => produ.selected)) {
          console.log('sel prod', prod.products.find(produ => produ.selected))
        }
      }
    }

    console.log(x)
  }
)

getSelectedProduct正在工作并在应该更新时更新。但是getSelectedProductProduct没有执行。我究竟做错了什么?

它们用于组件中:

const mapStateToProps = (state) => ({
  region: state.get('map').get('region'),
  markers: state.get('searchResults').get('products'),
  selectedProduct: getSelectedProduct(state),
  selectedProductProduct: getSelectedProductProduct(state)
})

动作差异

在此处输入图像描述

还原状态

在此处输入图像描述

导致顶部图像中差异的 redux 操作不会导致getSelectedProductProduct执行。我认为组件不知道其字段已更改。我正在进一步调查这件事。想知道该字段是否嵌套太深,以至于组件无法注册更改。

4

1 回答 1

0

它看起来像getSelectedProduct过滤器searchResults.products.shop,但动作正在改变searchResults.products.products[1].selected。所以getSelectedProduct每次都返回相同的值不变。这就是为什么getSelectedProductProduct不重新计算。

于 2017-06-23T02:47:22.937 回答