React-dnd: Menggunakan redux connect bersama pemetaan DropTarget

Dibuat pada 9 Feb 2016  ·  5Komentar  ·  Sumber: react-dnd/react-dnd

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.

Komentar yang paling membantu

Saya akan melakukannya seperti ini:

import { compose } from 'redux'

export default compose(
  DropTarget(dragTypes, storyTarget, collect),
  connect(mapStateToProps)
)(StoryEditor);

Semua 5 komentar

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?

menulis(...fungsi)

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);
Apakah halaman ini membantu?
0 / 5 - 0 peringkat