Saya mencoba mencari cara yang benar untuk menghubungkan redux ke komponen saya yang juga merupakan target drop.
export default DropTarget(dragTypes, storyTarget, collect)(connect(mapStateToProps)(StoryEditor));
Beginilah cara saya menghubungkan mereka saat ini, sepertinya berhasil, tetapi saya ingin memverifikasi bahwa ini benar.
Saya akan melakukannya seperti ini:
import { compose } from 'redux'
export default compose(
DropTarget(dragTypes, storyTarget, collect),
connect(mapStateToProps)
)(StoryEditor);
Dalam dokumen React DnD @gaearon menggunakan _.flow untuk mendekorasi sebuah komponen dengan beberapa komponen level yang lebih tinggi. Jadi jika saya membaca ini dengan benar, kita sebenarnya bisa menggunakan fungsi compose
dari redux, benar?
@ekeric13 Redux compose
identik dengan _.flow
dengan argumen terbalik. Itu adalah,
compose(f, g, h)(x) === flow(h, g, f)(x) === f(g(h(x)))
@gaearon Menggunakan compose
berfungsi dengan baik untuk saya, tetapi saya perhatikan dokumentasi untuk compose
mengatakan tidak benar sebagian besar fungsi yang diteruskan ke penulisan harus mengharapkan satu parameter, namun kami dapat meneruskan tiga argumen ke DropTarget
. Mengapa ini berhasil?
Menyusun fungsi dari kanan ke kiri.
Ini adalah utilitas pemrograman fungsional, dan disertakan dalam Redux sebagai kemudahan.
Anda mungkin ingin menggunakannya untuk menerapkan beberapa penyempurnaan toko secara berurutan.
Argumen
(argumen): Fungsi untuk menulis. Setiap fungsi diharapkan menerima satu parameter. Nilai kembaliannya akan diberikan sebagai argumen ke fungsi yang berdiri di sebelah kiri, dan seterusnya. Pengecualian adalah argumen paling kanan yang dapat menerima banyak parameter, karena akan memberikan tanda tangan untuk fungsi yang dikomposisikan.
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);
Komentar yang paling membantu
Saya akan melakukannya seperti ini: