如何使用重新选择将道具传递给包装在容器中的子组件?

How can I pass props down to a child component that is wrapped in a container using reselect?

我正在尝试将 props 从父组件传递到包装在容器中的子组件。我想使用 select 或使用作为道具传递的字符串,以便它可以 select 父数据的子状态。

目前数据结构如下:

Industry: {
 Data: {
  coolants: [array],
  machines: [array],
  tools: [array]
 }
}

使用 selectors 我可以 select 获取所有行业数据,但是我尝试仅对 'coolants' 使用 selectors 到 select

在我的父组件中,我将 'coolants' 的道具传递给 select: <ChartContainer category='coolants' />

ChartContainer.js:

const mapStateToProps = createStructuredSelector({
    data: makeSelectData(),
})

const withConnect = connect(mapStateToProps, null)
const withReducer = injectReducer({ key: 'industry', reducer })

export default compose (
    withReducer,
    withConnect
)(ChartComponent);  

selectors.js

const selectDomain = () => state => state.get('industry')

const makeSelectData = () => createSelector(
  selectDomain(),
  substate => substate.toJS()
)

export {
  makeSelectData
}

你需要两件事:

  1. 在选择器中使用组件道具的类别值 (mapStateToProps docs: ownProps);
  2. 使用此道具在您的不可变数据结构中获取嵌套值 (ImmutableJS docs: getIn);

可能的变化是:

const selectDomain = () => (state, props) => state.getIn(['industry', props.category])