2017-09-07 25 views
1

私はセレクタを持つコンテナを1つ持っており、他のセレクタを持つ別のコンテナをレンダリングします。再選択 - セレクタで定義されていない小道具

問題点は、2番目の小道具は定義されておらず、すべてが壊れていることです。ここ

は(小道具が第2のセレクタで定義されていない)のコードは次のとおり小道具が未定義復帰

selectProductsState。

ワンセレクター:

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

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

    return items[id]; 
    } 
); 

ProductContainer:

class ProductPage extends React.Component { 

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

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

別の容器は、彼自身のセレクタを持っています。

どうすれば修正できますか?あなたは結果関数のparams({ props })にundefinedオブジェクトからpropsプロパティを抽出しようとするので、それはおそらく壊れる

おかげ

答えて

1

問題がProductPageコンテナにreact-routerから渡されたparams小道具とありました。はい

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

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

ありがとう!それはうまくいった! –

1

selectProductsStateから未定義の受信を受け入れることができれば、結果の関数を単純に書き直して、大文字小文字を考慮する必要があります。例:

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

が、これは私が欲しいものではありません:それは自動的にOtherContainerに受け継がれていないので、params

、したがって、それはundefined

ソリューションはOtherContainerに手動で小道具を渡しているのですparamsは。小道具は決して定義してはいけません。問題は、セレクタを持つ親コンテナを持つコンテナから小道具にアクセスしようとすると、小道具が定義されていないということです。分かりますか?おかげで –

関連する問題