正しい解決策を立てる方法がわかりません。コンテナ内のアクションを別のコンポーネントから呼び出す場合は、私はコンポーネントにあまりにも多くのパラメータを渡す必要があり、それらのすべてを記述したくないので、スプレッド演算子を使用してください。connect()と{... this.props}を使ってreact-reduxを使用する
は私がメニューでこの例のように、小道具を経由してReduxのストアからすべての小道具を渡すことができます知っているが、私のコンポーネントは、あまりにも入れ子になった、と私は巣
render() {
return (
<div className="wrapper">
<Menu {...this.props} />
</div>
);
}
}
const mapStateToProps = reduxStore => (
{
app: reduxStore.app
}),
mapDispatchToProps = dispatch => ({appActions: bindActionCreators(appActions, dispatch)});
export default connect(mapStateToProps, mapDispatchToProps)(App);
私は入れ子になったコンポーネントをreduxストアに接続することに決めました。なぜなら、メインコンテナコンポーネント内のストアとアクションを持つ入れ子コンポーネントから作業する必要があるからです。しかし、私のネストされたコンポーネントにスプレッド演算子を使用するので、この解決策は動作しません。私が持っている
render() {
return <Link activeClassName='active' onClick={this.props.appActions.closeMenu} {...this.props} />;
}
と拡散演算子を使用して、コンポーネントがその親コンポーネントからあまりにも多くの異なるパラメータを取得するために非常に重要である、と私は使用していない場合は、{... this.props}、私が持っている
render() {
const { to, onlyActiveOnIndex, className, specialIcons } = this.props;
return <Link activeClassName='active' onClick={this.props.appActions.closeMenu} to={to} specialIcons={specialIcons} onlyActiveOnIndex={onlyActiveOnIndex} className={className} >{this.props.children}</Link>;
}
しかし、また、このように書くこと私のコンポーネントの使用{... this.props}のために、エラーが発生し、コンテナやコンポーネントからのアクションを含むすべての小道具が得られます。私はこのプロンプトの1つの解決策を見つけましたが、私はそれが正しい変種であるとは確信していません。私は普及した演算子で小道具を複製するが、共通の記憶から新しい機能(アクション)を含むプロパティを削除する。
render() {
let oldProps = {...this.props};
delete oldProps.appActions;
delete oldProps.app;
return <Link activeClassName='active' onClick={this.props.appActions.closeMenu} {...oldProps} >{this.props.children}</Link>;
}
}
const mapState = reduxStore => ({app: reduxStore.app}),
mapDispatchToProps = dispatch => ({appActions: bindActionCreators(appActions, dispatch)});
export default connect(mapState, mapDispatchToProps)(NavLink);
私が反応し-Reduxの中の基本と世界的な何かを理解していないことを推測しているか、私は悪い習慣を使用しています。 Reactで上位コンポーネントを使うべきでしょうか?しかし今、私はそれをより良くする方法を知らない。