Javascript 重新选择-选择器中未定义道具

Javascript 重新选择-选择器中未定义道具,javascript,reactjs,redux,reselect,Javascript,Reactjs,Redux,Reselect,我有一个带选择器的容器,它呈现另一个带其他选择器的容器 问题是第二个,道具没有定义,它破坏了一切 下面是代码(第二个选择器中未定义道具): 选择ProductsState道具返回未定义 一个选择器: const selectProductsState = () => ({ products }, props) => { return { products, props } }; const getCurrentProductFromParams = () => createS

我有一个带选择器的容器,它呈现另一个带其他选择器的容器

问题是第二个,道具没有定义,它破坏了一切

下面是代码(第二个选择器中未定义道具):

选择ProductsState道具返回未定义

一个选择器:

const selectProductsState = () => ({ products }, props) => { return { products, props } };

const getCurrentProductFromParams = () => createSelector(
  selectProductsState(),
  getProductsItems(),
  ({ props }, items) => {
    const id = extractId(props.params);

    return items[id];
  }
);
class ProductPage extends React.Component {

    render() {
        return (<OtherContainer />)
    }
}

const mapStateToProps = createStructuredSelector({
  hasLoadingErrors: getHasLoadingErrors(),
  productNotFound: getProductNotFound(),
  product: getProduct(),
  getCurrentProductFromParams
});
ProductContainer:

const selectProductsState = () => ({ products }, props) => { return { products, props } };

const getCurrentProductFromParams = () => createSelector(
  selectProductsState(),
  getProductsItems(),
  ({ props }, items) => {
    const id = extractId(props.params);

    return items[id];
  }
);
class ProductPage extends React.Component {

    render() {
        return (<OtherContainer />)
    }
}

const mapStateToProps = createStructuredSelector({
  hasLoadingErrors: getHasLoadingErrors(),
  productNotFound: getProductNotFound(),
  product: getProduct(),
  getCurrentProductFromParams
});
class ProductPage扩展了React.Component{
render(){
返回()
}
}
const mapStateToProps=createStructuredSelector({
hasLoadingErrors:getHasLoadingErrors(),
productNotFound:getProductNotFound(),
product:getProduct(),
getCurrentProductFromParams
});
另一个容器有自己的选择器

我怎样才能解决这个问题


谢谢

它可能会中断,因为您试图从结果函数params(
{props}
中未定义的
对象中提取
props
属性

如果从
selectProductsState
接收未定义的数据是一个可接受的用例,那么您应该简单地重写result函数,以便考虑边缘情况。例如:

(productsState, items) => {
    if(productsState === undefined){
        return undefined;
    }
    const id = extractId(productsState.props.params);
    return items[id];
 }

问题在于从
react router
传递到
ProductPage
容器的
params
prop

因此,
params
不会自动传递给
OtherContainer
,因此,params是
未定义的

解决方案是手动将道具传递给
其他容器

class ProductPage extends React.Component {
    render() {
        return (<OtherContainer params={this.props.params} />)
    }
}

const mapStateToProps = createStructuredSelector({
  hasLoadingErrors: getHasLoadingErrors(),
  productNotFound: getProductNotFound(),
  product: getProduct(),
  getCurrentProductFromParams
});
class ProductPage扩展了React.Component{
render(){
返回()
}
}
const mapStateToProps=createStructuredSelector({
hasLoadingErrors:getHasLoadingErrors(),
productNotFound:getProductNotFound(),
product:getProduct(),
getCurrentProductFromParams
});

是的,但这不是我想要的。道具永远不能是未定义的。问题是,当我试图从一个容器中访问道具时,如果该容器的父容器带有is选择器,则道具是未定义的。你知道我的意思吗?谢谢