ドロップターゲットでもあるコンポーネントにreduxを接続する正しい方法を見つけようとしています。
export default DropTarget(dragTypes, storyTarget, collect)(connect(mapStateToProps)(StoryEditor));
これが私が現在それらを接続している方法であり、それは機能しているようですが、これが正しいことを確認したかったのです。
私はこのようにします:
import { compose } from 'redux'
export default compose(
DropTarget(dragTypes, storyTarget, collect),
connect(mapStateToProps)
)(StoryEditor);
React DnDのドキュメントでは、 @ gaearonは_.flowを使用してコンポーネントを複数の上位レベルのコンポーネントで装飾します。 だから私がこの権利を読んでいるなら、私たちは実際にreduxからcompose
関数を使うことができますよね?
@ ekeric13 Reduxのcompose
は、引数が逆になっている_.flow
と同じです。 あれは、
compose(f, g, h)(x) === flow(h, g, f)(x) === f(g(h(x)))
@gaearon compose
使用は私にとっては問題なく機能しますが、 compose
のドキュメントには、composeに渡されるほとんどの関数は単一のパラメーターを期待する必要があると記載されていますが、3つの引数をに渡すことができます。 DropTarget
。 なぜこれが機能するのですか?
右から左に関数を構成します。
これは関数型プログラミングユーティリティであり、便宜上Reduxに含まれています。
これを使用して、複数のストアエンハンサーを連続して適用することをお勧めします。
引数
(引数):構成する関数。 各関数は単一のパラメーターを受け入れることが期待されています。 その戻り値は、左側にある関数への引数として提供されます。 例外は、複数のパラメーターを受け入れることができる右端の引数です。これは、結果の合成関数の署名を提供するためです。
BuilderArea.propTypes = {
addPanel: PropTypes.func.isRequired
};
const mapStateToProps = state => ({
panels: state.panels
});
export default compose(
DropTarget(Types.PANEL_CARD, builderAreaTarget, (connect, monitor) => ({
connectDropTarget: connect.dropTarget(),
isOver: monitor.isOver()
})),
connect(
mapStateToProps,
{ addPanel }
)
)(BuilderArea);
最も参考になるコメント
私はこのようにします: